Create account / Log in

Bug - String function causing Vassal memory / crash issues?

Issues with the Vassal engine.

Moderators: uckelman, Tim M

Bug - String function causing Vassal memory / crash issues?

Postby marktb1961 » September 30th, 2020, 2:29 pm

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....

Code: Select all
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)
Platform used:
Vassal 3.4.10
MacOS Big Sur
iMac (27", mid-2020)
User avatar
marktb1961
 
Posts: 335
Joined: October 4th, 2018, 2:36 pm
Location: Liverpool, England

Re: Bug - String function causing Vassal memory / crash issu

Postby Brent Easton » September 30th, 2020, 10:31 pm

Thanks for the report, I am looking into it.

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

Thanks.
User avatar
Brent Easton
 
Posts: 3226
Joined: December 21st, 2007, 3:06 am
Location: Berry, NSW, Australia

Re: Bug - String function causing Vassal memory / crash issu

Postby Brent Easton » September 30th, 2020, 10:39 pm

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.
User avatar
Brent Easton
 
Posts: 3226
Joined: December 21st, 2007, 3:06 am
Location: Berry, NSW, Australia

Re: Bug - String function causing Vassal memory / crash issu

Postby marktb1961 » September 30th, 2020, 11:17 pm

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
Last edited by marktb1961 on September 30th, 2020, 11:26 pm, edited 1 time in total.
Platform used:
Vassal 3.4.10
MacOS Big Sur
iMac (27", mid-2020)
User avatar
marktb1961
 
Posts: 335
Joined: October 4th, 2018, 2:36 pm
Location: Liverpool, England

Re: Bug - String function causing Vassal memory / crash issu

Postby Brent Easton » September 30th, 2020, 11:22 pm

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.
User avatar
Brent Easton
 
Posts: 3226
Joined: December 21st, 2007, 3:06 am
Location: Berry, NSW, Australia

Re: Bug - String function causing Vassal memory / crash issu

Postby uckelman » October 4th, 2020, 10:53 pm

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

http://www.vassalengine.org/~uckelman/tmp/
User avatar
uckelman
Site Admin
 
Posts: 8989
Joined: December 10th, 2007, 9:48 am
Location: Durham, England

Re: Bug - String function causing Vassal memory / crash issu

Postby marktb1961 » October 5th, 2020, 7:39 am

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

http://www.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.
Platform used:
Vassal 3.4.10
MacOS Big Sur
iMac (27", mid-2020)
User avatar
marktb1961
 
Posts: 335
Joined: October 4th, 2018, 2:36 pm
Location: Liverpool, England

Re: Bug - String function causing Vassal memory / crash issu

Postby uckelman » October 5th, 2020, 2:16 pm

Thus spake marktb1961:
>
> "uckelman" wrote:
> > There's a test build which should fix this,
> > VASSAL-3.4.4-SNAPSHOT-65040f175:
> >
> > http://www.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.
User avatar
uckelman
Site Admin
 
Posts: 8989
Joined: December 10th, 2007, 9:48 am
Location: Durham, England


Return to Technical Support & Bugs

Who is online

Users browsing this forum: No registered users and 3 guests