diff --git a/test/core/src/temalab/communicator/MainCommunicator.java b/test/core/src/temalab/communicator/MainCommunicator.java index 88b9b18..87a0efd 100644 --- a/test/core/src/temalab/communicator/MainCommunicator.java +++ b/test/core/src/temalab/communicator/MainCommunicator.java @@ -12,6 +12,7 @@ public class MainCommunicator{ private boolean pause; private List communictors; private boolean runCommThread; + private Thread shutdownHook; public MainCommunicator(MainModel mm) { communictors = new ArrayList<>(); @@ -50,9 +51,16 @@ public void run() { } }; commThread.start(); + shutdownHook = new Thread(this::stop); + Runtime.getRuntime().addShutdownHook(shutdownHook); } public void stop() { + synchronized(shutdownHook) { + if (!Runtime.getRuntime().removeShutdownHook(shutdownHook)) { + return; + } + } runCommThread = false; commThread.interrupt(); try { diff --git a/test/core/src/temalab/gui/view/GUIView.java b/test/core/src/temalab/gui/view/GUIView.java index 0235a9f..f209fcf 100644 --- a/test/core/src/temalab/gui/view/GUIView.java +++ b/test/core/src/temalab/gui/view/GUIView.java @@ -40,6 +40,7 @@ public class GUIView extends ApplicationAdapter implements MainModelListener{ private Map teamViews; private MainModel mm; private MainCommunicator mc; + private Thread shutdownHook; public void init(MainModel mm, MainCommunicator mc, float sizingFactor, boolean steppable) { universalDistanceConstant = sizingFactor; @@ -68,6 +69,8 @@ public void create() { controlPointViews = new HashMap<>(); teamViews = new HashMap<>(); mm.addListener(this); + shutdownHook = new Thread(this::dispose); + Runtime.getRuntime().addShutdownHook(shutdownHook); } @Override @@ -127,6 +130,11 @@ public void render() { @Override public void dispose() { + synchronized(shutdownHook) { + if (!Runtime.getRuntime().removeShutdownHook(shutdownHook)) { + return; + } + } shapeRenderer.dispose(); batch.dispose(); font.dispose();