Fixed leaking threads in simulations
authorplaa <plaa@180e2498-e6e9-4542-8430-84ac67f01cd8>
Tue, 13 Mar 2012 06:01:43 +0000 (06:01 +0000)
committerplaa <plaa@180e2498-e6e9-4542-8430-84ac67f01cd8>
Tue, 13 Mar 2012 06:01:43 +0000 (06:01 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@455 180e2498-e6e9-4542-8430-84ac67f01cd8

core/ChangeLog
core/src/net/sf/openrocket/gui/main/SimulationRunDialog.java

index e1df0361c469c89e5fdfbe802f5d534fbbf7f182..3c29aed69d2b28a8e19559cb883f29fb03c3df4b 100644 (file)
@@ -1,3 +1,11 @@
+2012-03-13  Sampo Niskanne
+
+       * [BUG] Threads piled up when running simulations
+
+2012-03-11  Sampo Niskanen
+
+       * Update copyright statements
+
 2012-02-19  Sampo Niskanen
 
        * Display computed motor class
index c108030567921690797a37cf7f477ca796a417f0..f85b248f640367a37df394fe710cabeef884e2d9 100644 (file)
@@ -47,7 +47,7 @@ public class SimulationRunDialog extends JDialog {
        private static final LogHelper log = Application.getLogger();
        private static final Translator trans = Application.getTranslator();
        
-
+       
        /** Update the dialog status every this many ms */
        private static final long UPDATE_MS = 200;
        
@@ -57,19 +57,15 @@ public class SimulationRunDialog extends JDialog {
        /** Flight progress at apogee */
        private static final double APOGEE_PROGRESS = 0.7;
        
-
-       /*
-        * The executor service is not static since we want concurrent simulation
-        * dialogs to run in parallel, ie. they both have their own executor service.
-        */
-       private final ExecutorService executor = Executors.newFixedThreadPool(
+       
+       private final static ExecutorService executor = Executors.newFixedThreadPool(
                        SwingPreferences.getMaxThreadCount());
        
-
+       
        private final JLabel simLabel, timeLabel, altLabel, velLabel;
        private final JProgressBar progressBar;
        
-
+       
        /*
         * NOTE:  Care must be used when accessing the simulation parameters, since they
         * are being run in another thread.  Mutexes are used to avoid concurrent usage, which
@@ -85,7 +81,7 @@ public class SimulationRunDialog extends JDialog {
        
        public SimulationRunDialog(Window window, Simulation... simulations) {
                //// Running simulations...
-               super(window, trans.get("SimuRunDlg.title.RunSim"), Dialog.ModalityType.DOCUMENT_MODAL);
+               super(window, trans.get("SimuRunDlg.title.RunSim"), Dialog.ModalityType.APPLICATION_MODAL);
                
                if (simulations.length == 0) {
                        throw new IllegalArgumentException("Called with no simulations to run");
@@ -93,7 +89,7 @@ public class SimulationRunDialog extends JDialog {
                
                this.simulations = simulations;
                
-
+               
                // Randomize the simulation random seeds
                for (Simulation sim : simulations) {
                        sim.getOptions().randomizeSeed();
@@ -138,7 +134,7 @@ public class SimulationRunDialog extends JDialog {
                progressBar = new JProgressBar();
                panel.add(progressBar, "spanx, growx, wrap para");
                
-
+               
                // Add cancel button
                JButton cancel = new JButton(trans.get("dlg.but.cancel"));
                cancel.addActionListener(new ActionListener() {
@@ -149,7 +145,7 @@ public class SimulationRunDialog extends JDialog {
                });
                panel.add(cancel, "spanx, tag cancel");
                
-
+               
                // Cancel simulations when user closes the window
                this.addWindowListener(new WindowAdapter() {
                        @Override
@@ -158,7 +154,7 @@ public class SimulationRunDialog extends JDialog {
                        }
                });
                
-
+               
                this.add(panel);
                this.setMinimumSize(new Dimension(300, 0));
                this.setLocationByPlatform(true);
@@ -194,8 +190,8 @@ public class SimulationRunDialog extends JDialog {
        }
        
        
-
-
+       
+       
        private void updateProgress() {
                int index;
                for (index = 0; index < simulations.length; index++) {
@@ -242,7 +238,7 @@ public class SimulationRunDialog extends JDialog {
        }
        
        
-
+       
        /**
         * A SwingWorker that performs a flight simulation.  It periodically updates the
         * simulation statuses of the parent class and calls updateProgress().