Bug - String function causing Vassal memory / crash issues?

VASSAL-3.4.4-0c9d947ed
MacOs Catalina

Module was working OK but when I tried to make use of one of the new Vassal String functions, immediately on making the change in the Editor, I received an out of memory warning (Max Heap side is already 2048Mb, following a previous incident of this, which I am not convinced was my module either). I upped again to 4096Mb and increased starting heap from 512Mb to 1024Mb. On restarting I got initially the same out of memory message shortly after starting and refreshing a scenario file. On restarting again and repeating similar actions, Vassal crashed.

The change I made was to the expression for a Calculated Property. To go from
…+ ChosenSide +…
to
… + ChosenSide.substring(1,14) +…

From the error log, I am steered towards an error in my expression, I am trying to substring a null value maybe. Nonetheless, the dramatic Vassal failure seems wrong, returning null would be expected, no ?

Log…

020-09-30 14:58:47,345 [81-AWT-EventQueue-0] INFO VASSAL.build.GameModule - Exiting 2020-09-30 14:58:54,134 [0-SwingWorker-pool-1-thread-2] INFO VASSAL.launch.AbstractLaunchAction - Loading module file /Users/Mark/Dropbox/CCN v41a20 Sep26.vmod 2020-09-30 14:58:54,238 [0-SwingWorker-pool-1-thread-2] INFO VASSAL.launch.TilingHandler - No images to tile. 2020-09-30 14:58:54,239 [0-SwingWorker-pool-1-thread-2] INFO VASSAL.launch.AbstractLaunchAction - Loading module Commands & Colors: Napoleonics 2020-09-30 14:58:54,241 [0-SwingWorker-pool-1-thread-2] INFO VASSAL.tools.io.ProcessLauncher - launching /Applications/VASSAL VASSAL-3.4.4-0c9d947ed.app/Contents/MacOS/jre/bin/java -Xms512M -Xmx2048M -DVASSAL.id=83 -DVASSAL.port=52336 -Duser.home=/Users/Mark -Duser.dir=/Applications/VASSAL VASSAL-3.4.4-0c9d947ed.app -cp Contents/Resources/Java/Vengine.jar -Xdock:name=Commands & Colors: Napoleonics -Xdock:icon=/Applications/VASSAL VASSAL-3.4.4-0c9d947ed.app/Contents/Resources/VASSAL.icns VASSAL.launch.Editor --edit -- /Users/Mark/Dropbox/CCN v41a20 Sep26.vmod 2020-09-30 14:58:55,091 [83-main] INFO VASSAL.launch.StartUp - Starting 2020-09-30 14:58:55,097 [83-main] INFO VASSAL.launch.StartUp - OS Mac OS X 10.15.6 2020-09-30 14:58:55,098 [83-main] INFO VASSAL.launch.StartUp - Java version 15 2020-09-30 14:58:55,098 [83-main] INFO VASSAL.launch.StartUp - VASSAL version 3.4.4-SNAPSHOT-0c9d947ed 2020-09-30 14:58:55,099 [83-main] INFO VASSAL.launch.Launcher - Editor 2020-09-30 14:58:58,637 [83-AWT-EventQueue-0] INFO VASSAL.script.ExpressionInterpreter - Attempting to load /VASSAL/script/init_expression.bsh URI generated=jar:file:/Applications/VASSAL%20VASSAL-3.4.4-0c9d947ed.app/Contents/Resources/Java/Vengine.jar!/VASSAL/script/init_expression.bsh 2020-09-30 14:59:03,277 [83-AWT-EventQueue-0] INFO VASSAL.launch.BasicModule - Commands & Colors: Napoleonics version 4.1-a0f21 2020-09-30 14:59:16,489 [83-AWT-EventQueue-0] WARN VASSAL.tools.ErrorDialog - dicetray [Basic Piece] - Map not found: mapId=Dice Tray 2020-09-30 14:59:16,491 [83-AWT-EventQueue-0] WARN VASSAL.tools.ErrorDialog - Could not find map: Dice Tray 2020-09-30 14:59:16,546 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Next_mnemonic 2020-09-30 14:59:16,546 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Prev_mnemonic 2020-09-30 14:59:16,546 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Finish_mnemonic 2020-09-30 14:59:16,547 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Cancel_mnemonic 2020-09-30 14:59:16,547 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Help_mnemonic 2020-09-30 14:59:31,023 [83-AWT-EventQueue-0] WARN VASSAL.tools.ErrorDialog - dicetray [Basic Piece] - Map not found: mapId=Dice Tray 2020-09-30 14:59:31,024 [83-AWT-EventQueue-0] WARN VASSAL.tools.ErrorDialog - Could not find map: Dice Tray 2020-09-30 14:59:31,036 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Next_mnemonic 2020-09-30 14:59:31,037 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Prev_mnemonic 2020-09-30 14:59:31,037 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Finish_mnemonic 2020-09-30 14:59:31,037 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Cancel_mnemonic 2020-09-30 14:59:31,037 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Help_mnemonic 2020-09-30 14:59:39,948 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:39,949 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece banner french (French): Can't find matching Piece Slot 2020-09-30 14:59:40,362 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:40,516 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Highlight blackwhite: Can't find matching Piece Slot 2020-09-30 14:59:40,676 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:40,677 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece banner russian (Russian): Can't find matching Piece Slot 2020-09-30 14:59:40,677 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:40,717 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece side blue L: Can't find matching Piece Slot 2020-09-30 14:59:40,717 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Label (R201 - Czarnowo - 23 December 1806): Can't find matching Piece Slot 2020-09-30 14:59:40,718 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:40,719 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece side red R: Can't find matching Piece Slot 2020-09-30 14:59:40,842 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:40,842 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Label (Pomiechowo): Can't find matching Piece Slot 2020-09-30 14:59:40,900 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece side blue R: Can't find matching Piece Slot 2020-09-30 14:59:40,900 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:41,008 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Highlight blue: Can't find matching Piece Slot 2020-09-30 14:59:41,008 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:41,045 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:41,238 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:41,239 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:41,239 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Label white (Wkra stream): Can't find matching Piece Slot 2020-09-30 14:59:41,240 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:41,240 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:41,345 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Highlight blackwhite: Can't find matching Piece Slot 2020-09-30 14:59:42,342 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece side red L: Can't find matching Piece Slot 2020-09-30 14:59:42,343 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Label (Czarnowo): Can't find matching Piece Slot 2020-09-30 14:59:45,179 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Highlight blue: Can't find matching Piece Slot 2020-09-30 14:59:45,208 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Highlight blackwhite: Can't find matching Piece Slot 2020-09-30 14:59:45,882 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece dicetray: No Map 2020-09-30 14:59:45,891 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:45,891 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:45,941 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Highlight blackwhite: Can't find matching Piece Slot 2020-09-30 14:59:45,978 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:46,000 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:46,027 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Label white (Narew River): Can't find matching Piece Slot 2020-09-30 14:59:46,028 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:46,055 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece British general VP: Can't find matching Piece Slot 2020-09-30 14:59:46,055 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece French general VP: Can't find matching Piece Slot 2020-09-30 14:59:48,831 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece Highlight blue: Can't find matching Piece Slot 2020-09-30 15:00:22,848 [83-AWT-EventQueue-0] WARN VASSAL.tools.ErrorDialog - dicetray [Basic Piece] - Map not found: mapId=Dice Tray 2020-09-30 15:00:22,849 [83-AWT-EventQueue-0] WARN VASSAL.tools.ErrorDialog - Could not find map: Dice Tray 2020-09-30 15:00:22,858 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Next_mnemonic 2020-09-30 15:00:22,858 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Prev_mnemonic 2020-09-30 15:00:22,858 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Finish_mnemonic 2020-09-30 15:00:22,858 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Cancel_mnemonic 2020-09-30 15:00:22,858 [83-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Help_mnemonic 2020-09-30 15:00:32,606 [83-AWT-EventQueue-0] ERROR VASSAL.build.module.GameRefresher - Can't refresh piece dicetray: No Map 2020-09-30 15:06:32,457 [0-ProcessLauncher-2] WARN VASSAL.tools.logging.LoggedOutputStream - 2020-09-30 15:06:32.457 java[47558:3571478] WARNING: <NSSavePanel: 0x7f8a24f89d60> found it necessary to prepare implicitly; please prepare panels using NSSavePanel rather than NSApplication or NSWindow. 2020-09-30 15:06:33,459 [0-ProcessLauncher-2] WARN VASSAL.tools.logging.LoggedOutputStream - 2020-09-30 15:06:33.459 java[47558:3571478] WARNING: <NSSavePanel: 0x7f8a24f89d60> found it necessary to start implicitly; please start panels using NSSavePanel rather than NSApplication or NSWindow. 2020-09-30 15:06:33.459 java[47558:3571478] WARNING: <NSSavePanel: 0x7f8a24f89d60> running implicitly; please run panels using NSSavePanel rather than NSApplication. 2020-09-30 15:07:01,270 [83-AWT-EventQueue-0] ERROR VASSAL.tools.ErrorDialog - java.lang.NullPointerException: Cannot invoke "Object.toString()" because "value" is null at VASSAL.script.ExpressionInterpreter.evaluate(ExpressionInterpreter.java:294) at VASSAL.script.expression.BeanShellExpression.evaluate(BeanShellExpression.java:51) at VASSAL.script.expression.Expression.evaluate(Expression.java:64) at VASSAL.counters.CalculatedProperty.evaluate(CalculatedProperty.java:184) at VASSAL.counters.CalculatedProperty.getProperty(CalculatedProperty.java:153) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.Labeler.getProperty(Labeler.java:200) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.CalculatedProperty.getProperty(CalculatedProperty.java:165) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.Labeler.getProperty(Labeler.java:200) at VASSAL.script.expression.FormattedStringExpression.evaluate(FormattedStringExpression.java:66) at VASSAL.tools.FormattedString.getText(FormattedString.java:150) at VASSAL.tools.FormattedString.getText(FormattedString.java:120) at VASSAL.counters.Labeler.getLabel(Labeler.java:634) at VASSAL.counters.Labeler.getName(Labeler.java:252) at VASSAL.counters.ActionButton.getName(ActionButton.java:123) at VASSAL.counters.ActionButton.getName(ActionButton.java:123) at VASSAL.counters.CalculatedProperty.getName(CalculatedProperty.java:81) at VASSAL.counters.Labeler.setLabel(Labeler.java:464) at VASSAL.counters.Labeler.mySetState(Labeler.java:234) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:67) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PlaceMarker.createMarker(PlaceMarker.java:280) at VASSAL.counters.Replace.createMarker(Replace.java:97) at VASSAL.counters.PlaceMarker.placeMarker(PlaceMarker.java:159) at VASSAL.counters.Replace.replacePiece(Replace.java:54) at VASSAL.counters.Replace.myKeyEvent(Replace.java:47) at VASSAL.counters.Decorator.keyEvent(Decorator.java:315) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.ReportState.keyEvent(ReportState.java:122) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.doLoopOnce(TriggerAction.java:326) at VASSAL.counters.TriggerAction.myKeyEvent(TriggerAction.java:204) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:168) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.ReportState.keyEvent(ReportState.java:122) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.doLoopOnce(TriggerAction.java:326) at VASSAL.counters.TriggerAction.myKeyEvent(TriggerAction.java:204) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:168) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.ActionButton$ButtonPusher.doClick(ActionButton.java:279) at VASSAL.counters.ActionButton$ButtonPusher$MapMouseListener.mouseClicked(ActionButton.java:308) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:278) at VASSAL.build.module.Map.mouseClicked(Map.java:1253) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6617) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342) at java.desktop/java.awt.Component.processEvent(Component.java:6379) at java.desktop/java.awt.Container.processEvent(Container.java:2263) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4557) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 2020-09-30 15:07:14,839 [83-AWT-EventQueue-0] ERROR VASSAL.tools.ErrorDialog - java.lang.OutOfMemoryError: Java heap space at java.base/java.lang.StringLatin1.toChars(StringLatin1.java:74) at java.base/java.lang.String.toCharArray(String.java:3250) at java.desktop/javax.swing.text.GapContent.insertString(GapContent.java:132) at java.desktop/javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:732) at java.desktop/javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:716) at java.desktop/javax.swing.text.PlainDocument.insertString(PlainDocument.java:131) at java.desktop/javax.swing.text.AbstractDocument.replace(AbstractDocument.java:675) at java.desktop/javax.swing.text.JTextComponent.setText(JTextComponent.java:1729) at java.desktop/javax.swing.JTextArea.<init>(JTextArea.java:207) at java.desktop/javax.swing.JTextArea.<init>(JTextArea.java:173) at VASSAL.tools.BugDialog.buildDetailsScroll(BugDialog.java:262) at VASSAL.tools.BugDialog.buildOldVersionPanel(BugDialog.java:273) at VASSAL.tools.BugDialog.buildContentsPanel(BugDialog.java:132) at VASSAL.tools.BugDialog.<init>(BugDialog.java:117) at VASSAL.tools.ErrorDialog.lambda$bug$0(ErrorDialog.java:90) at VASSAL.tools.ErrorDialog$$Lambda$400/0x00000008005af1c8.run(Unknown Source) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) at java.base/java.security.AccessController.executePrivileged(AccessController.java:753) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 2020-09-30 15:08:24,560 [83-AWT-EventQueue-0] INFO VASSAL.build.GameModule - Exiting 2020-09-30 15:09:17,797 [0-SwingWorker-pool-1-thread-3] INFO VASSAL.launch.AbstractLaunchAction - Loading module file /Users/Mark/Dropbox/CCN v41a20 Sep26.vmod 2020-09-30 15:09:17,913 [0-SwingWorker-pool-1-thread-3] INFO VASSAL.launch.TilingHandler - No images to tile. 2020-09-30 15:09:17,914 [0-SwingWorker-pool-1-thread-3] INFO VASSAL.launch.AbstractLaunchAction - Loading module Commands & Colors: Napoleonics 2020-09-30 15:09:17,921 [0-SwingWorker-pool-1-thread-3] INFO VASSAL.tools.io.ProcessLauncher - launching /Applications/VASSAL VASSAL-3.4.4-0c9d947ed.app/Contents/MacOS/jre/bin/java -Xms2048M -Xmx4096M -DVASSAL.id=85 -DVASSAL.port=52712 -Duser.home=/Users/Mark -Duser.dir=/Applications/VASSAL VASSAL-3.4.4-0c9d947ed.app -cp Contents/Resources/Java/Vengine.jar -Xdock:name=Commands & Colors: Napoleonics -Xdock:icon=/Applications/VASSAL VASSAL-3.4.4-0c9d947ed.app/Contents/Resources/VASSAL.icns VASSAL.launch.Editor --edit -- /Users/Mark/Dropbox/CCN v41a20 Sep26.vmod 2020-09-30 15:09:18,972 [85-main] INFO VASSAL.launch.StartUp - Starting 2020-09-30 15:09:18,980 [85-main] INFO VASSAL.launch.StartUp - OS Mac OS X 10.15.6 2020-09-30 15:09:18,981 [85-main] INFO VASSAL.launch.StartUp - Java version 15 2020-09-30 15:09:18,982 [85-main] INFO VASSAL.launch.StartUp - VASSAL version 3.4.4-SNAPSHOT-0c9d947ed 2020-09-30 15:09:18,982 [85-main] INFO VASSAL.launch.Launcher - Editor 2020-09-30 15:09:22,595 [85-AWT-EventQueue-0] INFO VASSAL.script.ExpressionInterpreter - Attempting to load /VASSAL/script/init_expression.bsh URI generated=jar:file:/Applications/VASSAL%20VASSAL-3.4.4-0c9d947ed.app/Contents/Resources/Java/Vengine.jar!/VASSAL/script/init_expression.bsh 2020-09-30 15:09:26,972 [85-AWT-EventQueue-0] INFO VASSAL.launch.BasicModule - Commands & Colors: Napoleonics version 4.1-a0f21 2020-09-30 15:09:50,153 [85-AWT-EventQueue-0] WARN VASSAL.tools.ErrorDialog - dicetray [Basic Piece] - Map not found: mapId=Dice Tray 2020-09-30 15:09:50,155 [85-AWT-EventQueue-0] WARN VASSAL.tools.ErrorDialog - Could not find map: Dice Tray 2020-09-30 15:09:50,211 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Next_mnemonic 2020-09-30 15:09:50,211 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Prev_mnemonic 2020-09-30 15:09:50,212 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Finish_mnemonic 2020-09-30 15:09:50,212 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Cancel_mnemonic 2020-09-30 15:09:50,212 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Help_mnemonic 2020-09-30 15:10:12,503 [85-AWT-EventQueue-0] INFO VASSAL.build.module.GameState - Loading save game /Users/Mark/OneDrive/C&C Napoleonics/Scenarios v4/R201 - Czarnowo.vsav, created with module version 4.1-a0f21 2020-09-30 15:10:18,151 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Next_mnemonic 2020-09-30 15:10:18,153 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Prev_mnemonic 2020-09-30 15:10:18,153 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Finish_mnemonic 2020-09-30 15:10:18,153 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Cancel_mnemonic 2020-09-30 15:10:18,153 [85-AWT-EventQueue-0] WARN VASSAL.i18n.BundleHelper - No Translation: Wizard.Help_mnemonic 2020-09-30 15:10:47,584 [85-AWT-EventQueue-0] ERROR VASSAL.tools.ErrorDialog - java.lang.NullPointerException: Cannot invoke "Object.toString()" because "value" is null at VASSAL.script.ExpressionInterpreter.evaluate(ExpressionInterpreter.java:294) at VASSAL.script.expression.BeanShellExpression.evaluate(BeanShellExpression.java:51) at VASSAL.script.expression.Expression.evaluate(Expression.java:64) at VASSAL.counters.CalculatedProperty.evaluate(CalculatedProperty.java:184) at VASSAL.counters.CalculatedProperty.getProperty(CalculatedProperty.java:153) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.Labeler.getProperty(Labeler.java:200) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.CalculatedProperty.getProperty(CalculatedProperty.java:165) at VASSAL.counters.Decorator.getProperty(Decorator.java:114) at VASSAL.counters.Labeler.getProperty(Labeler.java:200) at VASSAL.script.expression.FormattedStringExpression.evaluate(FormattedStringExpression.java:66) at VASSAL.tools.FormattedString.getText(FormattedString.java:150) at VASSAL.tools.FormattedString.getText(FormattedString.java:120) at VASSAL.counters.Labeler.getLabel(Labeler.java:634) at VASSAL.counters.Labeler.getName(Labeler.java:252) at VASSAL.counters.ActionButton.getName(ActionButton.java:123) at VASSAL.counters.ActionButton.getName(ActionButton.java:123) at VASSAL.counters.CalculatedProperty.getName(CalculatedProperty.java:81) at VASSAL.counters.Labeler.setLabel(Labeler.java:464) at VASSAL.counters.Labeler.mySetState(Labeler.java:234) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:67) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PieceCloner.clonePiece(PieceCloner.java:65) at VASSAL.counters.PlaceMarker.createMarker(PlaceMarker.java:280) at VASSAL.counters.Replace.createMarker(Replace.java:97) at VASSAL.counters.PlaceMarker.placeMarker(PlaceMarker.java:159) at VASSAL.counters.Replace.replacePiece(Replace.java:54) at VASSAL.counters.Replace.myKeyEvent(Replace.java:47) at VASSAL.counters.Decorator.keyEvent(Decorator.java:315) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.ReportState.keyEvent(ReportState.java:122) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.doLoopOnce(TriggerAction.java:326) at VASSAL.counters.TriggerAction.myKeyEvent(TriggerAction.java:204) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:168) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.ReportState.keyEvent(ReportState.java:122) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:317) at VASSAL.counters.TriggerAction.doLoopOnce(TriggerAction.java:326) at VASSAL.counters.TriggerAction.myKeyEvent(TriggerAction.java:204) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:168) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.TriggerAction.keyEvent(TriggerAction.java:167) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.Decorator.keyEvent(Decorator.java:316) at VASSAL.counters.ActionButton$ButtonPusher.doClick(ActionButton.java:279) at VASSAL.counters.ActionButton$ButtonPusher$MapMouseListener.mouseClicked(ActionButton.java:308) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:278) at VASSAL.build.module.Map.mouseClicked(Map.java:1253) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:277) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6617) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342) at java.desktop/java.awt.Component.processEvent(Component.java:6379) at java.desktop/java.awt.Container.processEvent(Container.java:2263) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4557) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Thanks for the report, I am looking into it.

Is choseSide actually defined in any way, or is an indefined property?

Thanks.

I think the issue is due to the fact that Calculated Properties get evaluated in the Editor while a game is not running, so the expected properties have not been set up.

Where is chosenSide normally defined? Is that a Global Property or a Dynamic Property?

My initial thoughts are that I need to disable Calculated Property evaluation when a game is not in progress and just return “” as any results are compromised anywhere and generates spurious Bad Data in Module messages. This crash is just a worse case of this behaviour.

Thanks,
Brent.

It is a Dynamic Property and I had not (up to now) given it a starting value.

“My initial thoughts are that I need to disable Calculated Property evaluation when a game is not in progress…”

My feeling is that this would be a good idea. Perhaps it explains some of the other errors I’ve experienced (e.g. one or two recently reported)? I wonder if it would be possible to go one step further and disable CPs for pieces in the palette (regardless of a “game” in progress) ? I have had severe performance issues become apparent when trying to move a piece (with several CPs) from the pallet and that went away when I converted most of them to DPs. Could anyone be relying on CPs for items in a palette ?

Mark

Ah interesting. I think the secret might be to disable CP evaluation for any unit that is not on a map. This would include all Game piece palette pieces, all instances of editing pieces and any other situation where ‘temporary’ pieces are created that are not part of an actual game.

There’s a test build which should fix this, VASSAL-3.4.4-SNAPSHOT-65040f175:

vassalengine.org/~uckelman/tmp/

OK, I can try that (been using it a couple of days already).
Or did you mean VASSAL-3.4.4-SNAPSHOT-tempfile_reloc-5d176b717-macosx that was just put up last night ?

hmmm…
5d176b717 - claims to be older than 65040f175 and gives spurious warnings about custom code (when there is none in the module).

OK I will stick with 65040f175.

Thus spake marktb1961:

“uckelman” wrote:

There’s a test build which should fix this,
VASSAL-3.4.4-SNAPSHOT-65040f175:

vassalengine.org/~uckelman/tmp/[1]

OK, I can try that (been using it a couple of days already).
Or did you mean VASSAL-3.4.4-SNAPSHOT-tempfile_reloc-5d176b717-macosx
that was just put up last night ?

No, VASSAL-3.4.4-SNAPSHOT-tempfile_reloc-5d176b717 is for a different
issue.

Thanks for confirming that VASSAL-3.4.4-SNAPSHOT-65040f175 works.


J.