Added cancelation of previous burn calculation when you change the motor
authorBill Kuker <bkuker@billkuker.com>
Sun, 30 Aug 2009 19:40:16 +0000 (19:40 +0000)
committerBill Kuker <bkuker@billkuker.com>
Sun, 30 Aug 2009 19:40:16 +0000 (19:40 +0000)
src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java

index 4bd405bc94a67ea8cf6c0514d2f3be04c0ea9c09..e638e3de0864a273940d7bf086e1b27f466db52e 100644 (file)
@@ -111,17 +111,23 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
 \r
        private class BurnTab extends JPanel {\r
                private static final long serialVersionUID = 1L;\r
-\r
+               private Thread currentThread;\r
+               \r
                public BurnTab() {\r
                        setLayout(new BorderLayout());\r
                        setName("Burn");\r
                        reBurn();\r
                }\r
+               \r
+               private class BurnCanceled extends RuntimeException{\r
+                       private static final long serialVersionUID = 1L;\r
+               };\r
 \r
                public void reBurn() {\r
                        removeAll();\r
-                       new Thread() {\r
+                       currentThread = new Thread() {\r
                                public void run() {\r
+                                       final Thread me = this;\r
                                        final JProgressBar bar = new JProgressBar(0, 100);\r
                                        add(bar, BorderLayout.NORTH);\r
                                        try {\r
@@ -130,6 +136,9 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                                                                        @Override\r
                                                                        public void setProgress(float f) {\r
                                                                                bar.setValue((int) (f * 100));\r
+                                                                               if ( currentThread != me ){\r
+                                                                                       throw new BurnCanceled();\r
+                                                                               }\r
                                                                        }\r
                                                                });\r
 \r
@@ -146,6 +155,8 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                                                                revalidate();\r
                                                        }\r
                                                });\r
+                                       } catch (BurnCanceled c){\r
+                                               System.err.println("Burn Canceled!");\r
                                        } catch (Exception e) {\r
                                                remove(bar);\r
                                                JTextArea t = new JTextArea(e.getMessage());\r
@@ -153,7 +164,8 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                                                add(t);\r
                                        }\r
                                }\r
-                       }.start();\r
+                       };\r
+                       currentThread.start();\r
                }\r
        }\r
 \r