Release Notes for JMRI 4.10 release
Date: December 19, 2017
From: Bob Jacobsen
Subject: Production Release 4.10 of JMRI/DecoderPro is available for download.
We are very pleased to announce that the 4.9 series of JMRI test releases has resulted in a
version that's good enough to be recommended for general use, including by new users.
We're therefore making that version, "Production Release 4.10" available for download today.
Notes:
JMRI is now only available under the
GNU General Public License. For more information, please
see our
copyright and licensing page.
Required Migration StepSince JMRI 4.7.4
JMRI was updated in JMRI 4.7.4 to use a new serial library. Depending on your exact
circumstances, you may need to do some migrations:
- If you are using JMRI on Linux or macOS / OS X and are updating from an older JMRI version,
you must open the JMRI preferences and make sure that the selections are
correct for your serial device(s). Be sure to save the changes.
In general, previous versions used serial device names like
"/dev/cu.usbserial-ABC123FG". This version will generally omit the prefix, and
use serial device names like "cu.usbserial-ABC123FG".
(If given the choice between a name starting with "tty" and one starting with "cu",
pick the "cu" one). See the before and after images to the right.
-
If you are using Linux and have previously used the "JMRI_SERIAL_PORTS"
option to make sure your serial device is visible to JMRI, you'll have
to change that to use the "purejavacomm.portnamepattern" option instead.
See the
JMRI Linux install page for more information.
-
If you use your own JMRI scripts to access a serial device, you'll have to update
their library references:
- Any
import gnu.io
statements will have to be replaced by
import purejavacomm
statements.
- More generally, any reference to
gnu.io
, e.g. a reference to a class like
gnu.io.SerialPort
, statements will have to be replaced by
a reference to the corresponding
purejavacomm
class.
Known problems with this release
- This release will occasionally set the default connection
to internal, which prevents programming decoders. One
symptom is getting 123 every time you read a CV.
This is fixed in
JMRI 4.14.
We recommend you update to that version.
Warnings for this release:
See the JMRI 4.8 release note for more warnings predating the 4.9 development series.
These may be relevant to you if you're updating from a version earlier than JMRI 4.8.
Since JMRI 4.9.4
Due to changes in the capitalization of some method and property names, some scripts may fail until
adjusted to use the new capitalization. The Javadocs for any
JMRI class will list the correct capitalization.
Since JMRI 4.9.4
For Windows users only: JMRI 4.9.3 (and all later) has a new
version of the "LaunchJMRI.exe" program. It's used to set options as
JMRI is starting up, and is a completely normal part of JMRI. Because it's
new and different, however, your anti-virus program may reject it.
You might get a message about "file removed" or "file quarantined" or similar
and then JMRI might not start.
The solution is to make sure that your anti-virus program doesn't interfere
with JMRI's installation and running. There are so many of those, unfortunately,
that we can't really provide useful instructions beyond that.
Since JMRI 4.9.2
JMRI saves the Uhlenbrock connection's "baud" rate as an Internationalized string,
and, upon loading a configuration profile, requires an Internationalized "baud"
rate in the .XML file. JMRI will fail to properly configure the serial port if the
"baud" rate from the configuration profile does not match one of the baud rate
strings for the current Internationalization "locale". If you experience problems
where JMRI start-up of a Uhlenbrock-based connection does not configure the serial
port, it may be necessary to edit the connection's preferences, select the
appropriate "baud" rate, save the connection. This updates the configuration profile
XML file to use one of the "baud" rate strings expected by the Uhlenbrock-specific
code in JMRI. It is necessary to re-start JMRI for this change to take effect.
Since JMRI 4.7.6
If you're having trouble getting your DCC programmer to work, try
checking that the "Defaults" under "Preferences" are set to your
hardware system.
The reason: This version of JMRI (and all later) provides more options for
"default systems": If you have multiple sets of hardware attached, which
should be used for throttles, for programming, etc. JMRI tries to
guess the right settings for these when you upgrade to this version, but
apparently it sometimes gets that wrong (we haven't been able to track
that down yet). Setting them manually fixes any wrong guesses.
Since JMRI 4.7.5
This version of JMRI (and all later) writes a slightly streamlined
version of panel file contents.
Older files should still be readable by this version of JMRI,
but files written by this version may not be readable by versions
before JMRI 4.2 depending on their contents.
Since JMRI 4.7.5
The LocoNetOverTCP server has changes that may break scripts that reference it. Scripts refering to
the class jmri.jmrix.loconet.loconetovertcp.Server need to refer instead to
jmri.jmrix.loconet.loconetovertcp.LnTcpServer.
Since JMRI 4.7.3
This release will not start cleanly if installed over earlier versions of JMRI (the Windows installer ensures
this is not an issue). Remove the JAR files jackson-annotations-2.0.6.jar, jackson-core-2.0.6.jar,
and jackson-databind-2.0.6.jar from the lib directory within the previous installation directory to resolve
this.
Since JMRI 4.7.1
JMRI no longer supports the portable paths resource:
or file:
that
were deprecated in JMRI 2.13. When loading a panel, an error message will be displayed
if the panel contains a path that starts with resource:
and the panel will
not load until changed using an external editor. Paths starting with file:
cannot be automatically flagged because JMRI allows file: URLs; these will have to
be changed manually.
Since JMRI 4.7.1
The LocoNet Server (the LocoNetRMI service; not the LocoNetOverTcp service)
in this version of JMRI doesn't properly interoperate with
JMRI 4.7.1 through JMRI 4.7.4.
It does work fine with JMRI version 4.6 or before.
If you encounter a problem with version compatibility, you'll see an error
message that includes "local class incompatible
".
The workaround is to update both client and server JMRI machines to the same
JMRI version.
Since JMRI 4.7.1
JMRI applications will not load a panel file that fails XML validation; an error will be
shown that should explains the error, allowing it to be fixed using an editor. (The
explanations remain a work in progress.) The usual cause of something like this is (imperfect)
manual editing of the file, but it can happen for multiple reasons. If you encounter this, try these things:
- Use a copy of JMRI 4.6 to
load and rewrite the file into the proper format;
- Or set your
preferences to execute the
"TurnOffXmlValidation.py" script
before JMRI loads your panel file;
- Or finally, ask for help fixing the file on the JMRIusers list.
It's a good idea to keep a copy of the original file as you work on this, just in case.
Since JMRI 4.5.2
This and future releases of JMRI may not function on MacOS / OS X if the Java SE 6 provided by Apple is installed,
but it may be reinstalled with other software programs. macOS
operating system updates routinely remove this version of Java SE 6. Please raise any issues concerning this on the
user's group.
To remove Java SE 6 from macOS / OS X, follow these steps (these steps assume
JMRI is installed in the folder /Applications/JMRI. If you've installed it in a different location,
adjust the following paths as needed):
- Open Terminal.app.
OS X El Capitan only: Reboot into Recovery Mode by restarting your
Mac and pressing Cmd-R until the Apple logo appears. Once in Recovery Mode,
select Terminal from the Utilities menu.
- Run the command
/Applications/JMRI/PanelPro.app/Contents/Resources/uninstall-java6.sh
It can take
up to a half hour to complete. Wait for the message Removed Apple Java SE6.
OS X El Capitan only: Run the command bash /Volumes/Macintosh\ HD/Applications/JMRI/PanelPro.app/Contents/Resources/uninstall-java6.sh /Volumes/Macintosh\ HD
It can take up to a half hour to complete. Wait for the message Removed Apple Java SE6.
- OS X El Capitan only: Restart your Mac.
Download links:
Please note that the download links in this and future JMRI releases link to
Github servers.
If that doesn't work for you, the files up to 4.11.x are also still available from the
SourceForge.net servers.
Please let us know of any problems.
The full lists of changes in each of the preceding test releases
(4.9.1,
4.9.2,
4.9.3,
4.9.4,
4.9.5,
4.9.6,
4.9.7)
are available in our
GitHub code repository.
DecoderPro
-
The
<functionlabel>
and <soundlabel>
element names in decoder definitions can now be internationalized by using
<text>
elements instead of raw text.
- Randall Wood improved the speed of rebuilding the decoder index.
-
Dave Heap improved the procedure for
updating decoder definitions
in a user's existing roster.
- Dave Heap reenabled loading of soundlabels from a roster entry
- Dave Heap made the following changes:
Hardware Support
- Paul Bender improved consist management.
CAN
- The CAN tools were updated for display and support of translations.
C/MRI
- The C/MRI tools were updated for display and support of translations.
- Chuck Catania made multiple updates:
- Created NodeConfigManager - Opened from the CMRI menu by selecting the Configure Nodes menu item.
Creates a table view of configured nodes for the selected Connection Memo with node UA, node type,
input/output card and bit counts displayed.
Nodes can be added from this window. Nodes are loaded into an Arraylist for function processing.
From the Select column, nodes can be edited and deleted, bit assignments displayed window.
A printed listing of nodes can be done. Only NodeConfigManagerBundle.properties created.
- The existing NodeConfig tool will be retained during the development cycle and deprecated at the appropriate later time.
- SerialNode data items added: Text Description, CMRInet Options, Node Options.
Node option "Enable Polling at Startup" which is enabled as default,
provides for selective node polling control when launching PanelPro.
- Node configuration window format updated with additional data items.
- Multiple CMRI connection memo added to new and updated classes.
- ConnectionConfigXml updated to load and store additional node fields.
Backward compatibility is maintained with existing configuration XML files.
Checks for new configuration data fields is implemented.
Loading an existing connection config profile and not doing a Save from the preferences
will not update the connection profile with the new data fields.
- Added support for the MRCS cpNode.
A cpNode is defined as node type CPNODE = 3, NDP "C", 8 bit cards, two input cards, two output cards.
Input/Output Expander (IOX) card assignment is supported.
cpNode initialize(I) message conforms to NMRA LCS 9.10.1.
Node type 4 is reserved for a future Open Source Node (OSN) offering.
- Bit Assignment listing function has Comment field added. Assignment listing can be printed.
- Chuck Catania updated the C/MRI menu and improved the C/MRI serial monitor.
CTI
- Egbert Broerse and Ken Cameron fixed a problem with startup
for the Acela system.
DCC++
- Kevin Dickerson did some work on the DCC++ support structure
- Costin Grigoras added an option to allow the DCC++ TCP server to be started from JmriFaceless
- Kevin Dickerson made several improvements to improve the robustness the DCC-4-PC support:
- Reader board discovery is now in its own class
so that the message/reply sequence no longer interferes with the polling messages.
- Solicited replies now contain the original message.
As the reply contains no information as to its source
this removes the requirement for the message sender to try and keep track of
what messages it has sent and had or missed replies for.
This information can now be retrieved from the reply and,
removes any issues of sender getting out of sync with board
poll status requests and the replies.
- Paul Bender improved the output of the command monitor
- Paul Bender improved how raw packets (used for consisting) are sent
- Paul Bender updated the DCC++ support with
several corrections to message and reply formats for DCC++,
and to fix sending of raw DCC packets.
Digitrax LocoNet
- Added a jython/SendReceiveLocoNetPeerXfrMessage.py sample script for communication between
two computers using LocoNet Peer Transfer messages.
- Traffic explanations in the LocoNet Console changed slightly to improve reading and allow localization.
- Work by Paul Bender and Bob Milhaupt on improving how "throttle stealing"
is handled.
- Lionel Jeanson provided documentation on how to connect a Digikeijs DR5000 to JMRI using Loconet over TCP/IP
- Egbert Broerse improved the command station configuration tools
- JMRI now supports Roster-based programming of BDL16/BDL162/BDL168, DS64,
PM4/PM42, and SE8C devices. This makes programming of these devices very
much like programming a mobile decoder! Some limitations apply:
Some device features are not accessible via Roster entries, including
DS64 output addresses, DS64 routes, and SE8C "alternate" addressing (i.e.
SE8C address programming via OpSw17). These configurable features will
not be saved, restored, or modified when using a Roster entry.
Each device type has limitations on which Board ID (or Board Address) values
may be used.
The "old" tools, in the LocoNet menu item, are still in-place. Those tools
provide access to some aspects of device configuration which the Roster-based
mechiansm does not.
DMX512
- George Warner added support for DMX512 lights
ECoS
- The ECoS tools were updated for display and support of translations.
Lenz
- The Lenz tools were updated for display and support of translations.
- The Command Monitor can show translated descriptions.
Märklin
- The Märklin tools were updated for display and support of translations.
- Balazs Racz updated the OpenLCB support:
Ensures that set of sensor state generates an outgoing bus message,
even if the new state is the same as the previous.
This is desired by advanced users in order to be able to
write scripts that initialize the entire system to a known state.
RFID
- Support for the Olimex MOD-RFID1356MIFARE has been added.
Roco
- The Roco tools were updated for display and support of translations.
SPROG
- Egbert Broerse updated the SPROG support for system prefixes
Uhlenbrock Intellibox
- Initial creation of a JMRI connection to a Uhlenbrock command station now saves
the default serial port "baud" rate in a format which can be properly read by the
Uhlenbrock connection.
New / Updated decoder definitions
BLI
- Michael Mosher updated BLI decoders.
ESU
- David Heap made the ESU definitions less confusing by hiding some older ones.
- Ronald Huhn provided small corrections for ESU LokSound v3.5 definition
- Alain Carasso added a ESU LokPilot V1.0 definition
LaisDCC
- Updated xml file for LAISDCC family decoders to fix problem in CV15/CV7/CV8
and update the model numbers and the function numbers of new models 860015/16/19
NCE
- Micheal Mosher updated the definition for version 3.8 and added new models
- Support for the new Light-It and Illuminator multipurpose mobile/accessory/signal decoders. (Dave Heap)
Rautenhaus
- Ronald Kuhn added support for the RMX992 and RMX993
RR-CirKits
- Dick Bronson updated the MotorMan definition
Soundtraxx
- Michael Mosher updated some decoder definitions: add new CV from V1.5 Eco manual and TSU-4400 models.
- Michael Mosher updated the Soundtraxx TSU2 diesel to add Poppet Valves select
and more PM to Baldwin and other decoders
TCS
- Micheal Mosher updated the TCS WOW 4 decoder
- Alain Le Marchand added the K7D4 for Kato N-Scale ACS-64
ZIMO
- Peter Ulvestad fixed some spelling errors in decoder definitions.
- Ronald Kuhn translated the ZIMO MX600 decoder definitions
Dispatcher
- Craig48 fixed a bug in in the startup of Dispatcher: If a user name is '
defined for the transit or starting block or destination block,
the validation process fails. The validation code expects either the
system name or the user name, but not both.
The createActiveTrain method is using a concatenated string of both, causing the validation failure.
Layout Editor
- Some of the text boxes for entering input (e.g. names of items to add)
have been updated to selection boxes.
- Fixed a problem with validation of layout panel files
containing certain kinds of slip definitions.
- George Warner make a number of improvements:
- TrackSegments now support Bezier curves… (flex-track!)
- Added setDefaultButton(okButton) in a lot (but not 100%) of dialogs.
- Disable popup menu items that just show info (no actions).
- Alt-(Option-) scroll wheel zooms in/out (centered on cursor!).
- Added “Zoom to Fit”.
- More normalize[System|User]Names.
- TrackSegment width bug fixed.
- Added secondary grid size.
- Added antialiasing rendering hint for macOS and Windows.
- Convert more (all?) JTextField's to JmriBeanComboBox's.
- Removing orthogonal requirements for adding signal heads!
- Added per-PositionableLabel font support.
- Rotated PositionableLabel's are drawn correctly (and looks NICE!)!
- Alt key inverts Add and Drag "align to grid" behavior
- Added Rotation Menu info and set items.
- Add Signal Head Info to popup menus
- Added (de-)select All checkboxes to Layout Editor Tools
- Selection rect can now go up/left.
- Turnout comboboxes edit field now highlight (background color: exists=green, valid=yellow, invalid=red)
- Turnout comboboxes drop down lists now highlight (green = available, red = assigned to this layout)
- Fixed a problem where a Layout Editor panel stored while a train icon
was showing wouldn't validate properly when loaded.
- George Warner did a lot of work on the Layout Editor:
- Popup menu for Edge Connector now shows linked layout and edge connector.
- Turnout control circles are now drawn for turnout controlled turntable rays.
- LayoutEditorTools now lazy loaded to speed up LayoutEditor panel loading.
- EntryExitPairs colors can now be parsed as hex values as well as named colors
- LayoutEditorAux now lazy loaded to speed up LayoutEditor panel loading.
- ColorUtil.colorToString used instead of .nameToString (since it didn’t parse hex color string).
- Layout turnout (& slip) hidden, disabled and disableWhenOccupied attributes now save/load property
- Turnout and slip loading code optimized for speed
- Colors (including blocks and tracks) can now be parsed as hex values as well as named colors
- All track editors lazy load to speed up LayoutEditor panel loading.
- All track editors are now one per-layout instead of one per track (saves memory!).
- Layout slip editor now rotates editor slip to match layout slip being edited
- Tracks now draw at layer 3 (so Labels, train icons, etc. can be drawn behind or in front of tracks).
- Zoom now goes to x8 max (x7 & x8 menu choices added).
- Slips now correctly display slip state on load (based on the assigned turnout states).
- Layout turnout, slip and turntable popups include state info with turnout assignments
- Unconnected layout track end points now highlight while dragging to connect a track segment.
- Default window size is now the screen size.
- Signal masts and sensors can now be added to Edge Connectors. Note: The position and rotation will need adjusting.
- You can now right click on a track segment and split it into two (JMRI adds a new anchor point).
- You can now right click on an anchor point and merge the track segments either side (both must be in the same block).
- New Tools->check menu for unconnected tracks, unblocked tracks and non-contiguous blocks.
- The "Highlight selected block" has moved into the tool palette, next to the block dropdown list.
- Buffer stops now display an end bar.
- Edge connectors now display as an "X".
- Right click on an anchor point, buffer stop or edge connector and you can now change it into any of the other two.
- Re-organisation of the main layout editor options menu to make things easier to find for new users.
- More use of drop down combo-boxes so you can choose from a list instead of having to type or paste.
Logix
Operations
- Daniel Boudreau fixed a switch list bug when running in consolidation mode
Panel Editors
- A problem with reading really old panel files (pre-JMRI 4.0) was fixed.
- Pete Cressman did some work on the Control Panel Editor:
- The image palette is now a single window shared by all CPE panel windows
- Paul Bender provided a partial fix for a problem where
changing text label properties font size or bold changes background color
Preferences
Resources
- Chuck Catania added some ATSF CTC icons.
Roster
Turnouts, Lights and other elements
- The Turnout Table now makes it clear(er) which turnouts can
use the turnout locking feature and which Connections don't have it available.
- Improved the turnout locking GUI in the Turnout Table to make it
clearer what's going on.
- Egbert Broerse added tooltips and validation to the
field where you supply the hardware address when creating new
Sensors, Turnouts and Lights. This should make it much
easier for users to figure out what to put there.
- Egbert Broerse has done a lot of work to add hints and validity checks when entering
the hardware address to create a new Turnout, Light or Sensor.
- Fixed a problem where Simple Signal Logic make it not
possible to delete a Turnout from the Turnout Table
Scripting
- Added SensorGroupAutoItem sample script to handle the case of an "all-but-one" group.
For example, if you have sensor inputs for the left and right positions of a CTC signal level,
but not the center one, this will let you use an internal sensor for that position.
- Provides a new getTextArea() method to allow scripts access to the display area in protocol-monitor windows.
This follows from a JMRIusers discussion.
- Gerald Wolfson provided a ython/ClearFileHistory.py sample script to empty the file history before writing out an XML file
Signals
- The Siglet class, used by Simple Signal Logic and some user scripts for
signal logic, was reimplemented to avoid a (small) change of missing
a signal operation.
Signal Systems
Signal Heads
-
Corrected the Aspect used when "Lit" is unchecked from
Aspect 8 to the Aspect specified by the "Dark" appearance.
(Dave Heap)
Signal Masts
- George Warner fixed a problem that could cause signal masts to not display
- Dave Heap fixed a problem with the aspect range in DCC signal heads
Signal Groups
Simple Signal Logic
- SSL now has a "Restricting Speed" option that limits the
fastest shown appearance to Flashing Red (Restricting). This can be
useful in the entrance to a yard. A script can turn it on and off
for e.g. permission to switch on a lead.
- Simple Signal Logic now has a "restricting" option.
- Egbert Broerse improved the Simple Signal Logic GUI
- Fixed a problem where Simple Signal Logic make it not
possible to delete a Turnout from the Turnout Table
NX Entry/Exit Logic
- George Warner updated EntryExitPairs colors so they can now be parsed as hex values as well as named colors
- Dave Sand added support for cross-panel Entry/Exit when Edge Connectors are use to join Layout Editor panels.
- Use Auto Generate Entry-Exit Pairs to create pairs. Add Pair cannot be used to create a pair that spans the Edge Connector boundary.
- When setting routes using the sensors, a route can only go to the first sensor in the next panel.
USS CTC Logic
- Added Route and Traffic lock capabilities.
.
- Several updates to make the US&S CTC support appear more realistic.
Warrants
- Help files have been edited to document the following feature additions:
- When created, warrant throttle command scripts record the track speeds of the recording power address,
if a speed profile exists for the power. On playback, when possible, they use
this track speed and look up the corresponding throttle settings rather than the directly recorded
throttle setting. The intention is to have the warrant run at the same speeds regardless of changes
in DCC address or size of the train load.
- Warrants compute the track speeds for the DCC address on playback of the warrant when OPath lengths
are known and throttle settings are known. These are saved in Session Speed Profiles.
- Session Speed Profiles are kept for all DCC addresses running in warrants during a layout session.
- Session Speed Profiles can be merged into Roster Speed Profiles when layout sessions end.
- Warrant Preferences provides three choices for how to handle speed profile merging at shutdown.
- Speed profiles are viewable when creating or editing warrants or nxwarrants.
- Speed profiles are checked to be monotonic increasing, and when not, an editing facility is provided.
- The NXWarrant GUi is split into two successive windows: selecting the route and setting the run parameters
- The range of automatically Recorded track speeds is much wider than was anticipated. The feature
introduced in 4.9.2 using the throttle setting corresponding to the desired track speed is disabled.
Warrants use the throttle setting as stated in the script.
- The option to not use ramps for speed changes required by signals, blocks or rogue occupation is
added to the NXWarrant windows.
- NXWarrants use power series for start and end ramps. Start ramp throttle increments are incresed
by 8% at each time interval. End ramp throttle increments are decreased by 8% at each interval.
- Pete Cressman did some work on Warrants
Web Access
- Improved handling of roster entry IDs:
- URL-encode roster entry Ids in URL paths and only in URL paths.
- Accept URL-encoded roster entry Ids in request paths in the Roster servlet.
- Accept URL-encoded types and object Ids in request paths in the JSON servlet.
- Several components were updated to current versions.
Internationalization
- CAN, Märklin, C/MRI, ECoS, Roco and Lenz tools were slightly updated and fully support translations (Egbert Broerse)
- Egbert Broerse expanded the German and Dutch translations
- Sonnys Hansen expanded the Danish translation
- Ronald Kuhn improved the German translation
- Sonnys Hansen improved the Danish translation
- Ronald Kuhn improved the German translation
- Dave Heap and Ronald Kuhn arranged for translation of locomotive function and sound labels.
- Hervé Blorec provided an updated French translation of the help pages.
- Ronald Kuhn translated ESU decoder definitions
- Ronald Kuhn translated the ZIMO MX600 decoder definitions
- Egbert Broerse improved the German and Dutch translations
- Petr Šídlo updated the Czech translation
Virtual Sound Decoder
- Klaus Killinger provided additional user help pages and documentation
- Klaus Killinger fixed a problem when shutting down sound use
Miscellaneous
- Made some changes to how JMRI validates panel files to accept how AnyRail writes the files.
- Quite a bit of code that has been deprecated since JMRI 4.2 or before was removed.
- A problem with validating XML panel files created by XtrkCadReader was bypassed.
- USB support using the USB library has been updated to usb4java and a new USB browser added.
- Fixed a problem, new in JMRI 4.9.1, that prevented creating new profiles.
- Many improvements to the internal tests and technical documentation.
- A number of internal classes have had their singletons (i.e. 'instance()'
methods) put onto the instanceManager. This might have a tiny chance of
impacting certain esoteric user scripts.
- The Windows installer has been updated to a new version of the
NSIS tool. This shouldn't be visible to users.
- The Windows installer in JMRI 4.9.3 is compatible with current
Java 9 versions. (Some of the initial early-access Java 9 versions
had problems that you can avoid by keeping up to date with Java 9
updates if you want to use Java 9)
- Fixed the problem in JMRI 4.9.2 where an existing xml/decoderIndex.xml
file would cause delays or even a crash during start up.
- Ronald Kuhn improved how the consist tool is laid out on the screen
- The --profile command line argument to start a JMRI application with a specific profile
now takes the profile ID or the path to the profile directory as an argument (#3968).
- Excessive work and potential StackOverflow errors opening a profile have been fixed (#4005).
- The capitalization of many method and property names in JMRI has been changed to be internally
consistent within JMRI and to adhere to standard Java naming principles (#4034).
- The --profile command line argument to start a JMRI application with a specific profile
now takes the profile ID or the path to the profile directory as an argument (#3968).
- Excessive work and potential StackOverflow errors opening a profile have been fixed (#4005).
- The capitalization of many method and property names in JMRI has been changed to be internally
consistent within JMRI and to adhere to standard Java naming principles (#4034).
- Lionel Jeanson provided bug fixes and improvements for the throttle window toolbar Jynstruments (Wiimote and dccthrottle)
- Daniel Bergqvist updated the shutdown processing to allow it to terminate partway through.