Code documentation

Development tools

Code Structure

Techniques and Standards

How To

Functional Info

Background Info

JMRI: Java Version-Specific Features

This page contains information about the compatibility and features of various Java versions. We use this information to decide on our road map for future JMRI versions. (For pre-Java-1.8 content, see the historical page.)

Note: The Java community is moving from a "few big Java releases, years apart" development cycle to a cycle with a new release every six months, and a long-term support (LTS) release every three years. (For background, see here, here, here). It's not yet clear what this will mean for JMRI's development and migration path. Much discussion is necessary.

As of February 2018, Oracle has scheduled end-of-life for Java 8 in January 2019, and intends to release the next Long Term Support version (notionally known as both Java 11 and Java 18.9) in September of 2018. Given that some users will need to move forward for other applications once Java 8 is EOL, at a minimum we'll have to have JMRI running under both Java 8 and Java 11/18.9 by January 2019.

Capabilities

This section lists new Java capabilities, and which Java version they first appeared in. The "JDK" column shows the first Java Development Kit that could compile the feature; the "JRE" column lists the first runtime environment that could run the feature, including the needed JVM and library support.

Feature JDK JRE
HiDPI graphics support for Windows and Linux users. Probably "just works" with JRE update, unless something in JMRI breaks on Java 9 on Windows (Currently support using very large fonts as a workaround, but it quickly breaks as text overlaps widget boundaries) 8? 9
It seems that MacOS X (macOS) users will lose the use of the OS X App menu for About, Preferences, and (critically) Quit handling on that platform 9 9
It seems that MacOS X (macOS) users will lose Applescript scripting 9 9
Multi-version JARs can help with migration, see discussion ? 9
The Deprecated annotation can take "since" and "forRemoval" specifications, which simplifies our API migration management a lot. 9 8
JMRI uses several com.sun classes that will, at some point, no longer be accessible. This was originally scheduled as part of JPMS for 1.9, but was later removed. At some point, we will need to migrate away from these before using a more advanced JRE or JDK. ? ?
Java Platform Module System 9 9
UTF-8 Properties files (simplifies I18N) 9 9
Immutable Lists, Sets and Maps: More useful than it maybe sounds, because it can help keep the separate parts (i.e. better and worse code) of JMRI indepdendent. 9 9
JLink - improve packaging, faster startup ? 9
Even better support for immutable collections ? 10
Improved String whitespace support ? 11
(* indicates that a compatibility library is used in the early version)

JRE availability

This section lists the most recent Java Runtime version recommended by Oracle for various operating system versions. Please note that not all users of that operating system will have updated to this Java version; many will be using an older one.

Oracle's page on Java 1.7 requirements which says "Note: As of April 8, 2014 Microsoft stopped supporting Windows XP and therefore it is no longer a supported platform." Google finds numerous pages that show how to install Java 1.7 on XP or XP SP2. JMRI's Windows installation page will have updated information on this. The corresponding Java 8 page makes no mention of XP.

Updated Feb 10, 2018: At that time, although Java 9 was available, it was not being recommended for any platform. That situation may become clearer after the next Java release(s) are shipped, perhaps March or September 2018.

Updated April 18, 2018: At that time, the Oracle Java 8 page was saying:

Public updates for Oracle Java SE 8 will remain available for individual, personal use through at least the end of 2020.

For more details, see the Oracle Java pages for:

In May 2018 Oracle announced that Java 11, expected out at the end of calendar 2018, will be a "Long Term Support" release. Java 9 and 10 will not be.

As of April 2018, Java 10 only runs on 64-bit Windows versions (no 32-bit).

OS and platform Last JRE
Linux (depends, but
generally 1.8)
Win 10 (64-bit) 10
Win 8 (32-bit) 8
Win 7 (32-bit) 8
Win Server 2008 (32-bit) 8
Win Web Server 2008 (32-bit) 1.6
Win 2000 (32-bit) 1.6
Win Server 2003 (32-bit) 1.6
Win 8 (64-bit) 10
Win Server 2012 (64-bit) 10
Win Server 2012 R2 (64-bit) 10
Win 7 (64-bit) 10
Win Server 2008 R2 (64-bit) 10
Win Server 2008 (64-bit) 1.7
Win Web Server 2008 R2 (64-bit) 1.6
Win Vista (64-bit) 10
Windows Vista (32-bit) 8
Unofficial
Support
Win 2003 (64-bit) 1.6
Windows XP 8
Unofficial
Support
Windows 98 (2nd Ed) 1.5-11
Windows 98 1.4.2_14
Windows 95 1.3.1_20
Mac OS X 10.10 and later 10
Mac OS X 10.8.3 8
Mac OS X 10.7.3 1.7
Mac OS X 10.5.8 1.6 (Apple JVM)
Mac OS X 10.5.7 and earlier on Intel 1.5 (Apple JVM)
Mac OS X 10.3 and later on PowerPC 1.5 (Apple JVM)
MacOS "Classic" 1.1.8
OS/2 1.3

See the Java.com download page for all Operating Systems and
information on Java versions and hardware requirements.

System Requirements

The following combination of JMRI - Java - Platform/OS versions was based on Oracle and OS developers sources. It's translated to the OS install instructions (follow hyperlink in OS headers):

JMRI Java OS X Windows Linux Ubuntu Raspbian
4.2 1.8 10.8.3+ Mountain Lion Win7 SP1/8/10, Vista SP2, (XP) 5.5+ 12.04+ 14.04LTS
3.10.1 1.7 10.7.3 Lion Win7 SP1/8/10, Vista SP2, (XP) 5.5+ 12.04 12.04
3.10.1 1.6 10.6 Snow Leopard (JVM6) Win2003, Win2000 (x86) 5.5 10.4 N/A
2.14.1 1.5 10.5.7 Leopard (JVM5) Vista SP1, Win2000 SP3, Win8.x (x64) 9.04 N/A
2.8 1.5 10.4 Tiger Win98 (2nd Ed), XP, ME N/A
2.2 1.5 10.3 Panther Win98, ME N/A N/A N/A
1.3.1 10.3 Panther Win95, Win98 N/A N/A N/A
1.6 1.1.8 MacOS9.1 (MRJ) Win95, Win98 N/A N/A N/A