diff --git a/game-app/game-core/src/main/java/games/strategy/engine/framework/HistorySynchronizer.java b/game-app/game-core/src/main/java/games/strategy/engine/framework/HistorySynchronizer.java index e33625f17ec..d9c3197af0f 100644 --- a/game-app/game-core/src/main/java/games/strategy/engine/framework/HistorySynchronizer.java +++ b/game-app/game-core/src/main/java/games/strategy/engine/framework/HistorySynchronizer.java @@ -5,6 +5,7 @@ import games.strategy.engine.data.GamePlayer; import games.strategy.engine.history.EventChild; import games.strategy.engine.history.HistoryWriter; +import java.util.ConcurrentModificationException; import javax.swing.SwingUtilities; /** @@ -34,7 +35,20 @@ public void gameDataChanged(final Change change) { public void startHistoryEvent(final String event, final Object renderingData) { startHistoryEvent(event); if (renderingData != null) { - setRenderingData(renderingData); + SwingUtilities.invokeLater( + () -> { + try { + final Object translatedRenderingData = translateIntoMyData(renderingData); + gameData + .getHistory() + .getHistoryWriter() + .setRenderingData(translatedRenderingData); + } catch (ConcurrentModificationException e) { + // Instrumented to diagnose what exactly is causing this. + throw new ConcurrentModificationException( + "Failed to map renderingData=" + renderingData + " for event=" + event, e); + } + }); } } @@ -56,14 +70,6 @@ public void addChildToEvent(final String text, final Object renderingData) { }); } - void setRenderingData(final Object renderingData) { - SwingUtilities.invokeLater( - () -> { - final Object translatedRenderingData = translateIntoMyData(renderingData); - gameData.getHistory().getHistoryWriter().setRenderingData(translatedRenderingData); - }); - } - @Override public void stepChanged( final String stepName,