From: Bill Kuker Date: Sun, 30 Aug 2009 19:40:16 +0000 (+0000) Subject: Added cancelation of previous burn calculation when you change the motor X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=0b5e99178908dbcb2627838a083df79b00a55bce;p=sw%2Fmotorsim Added cancelation of previous burn calculation when you change the motor --- diff --git a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index 4bd405b..e638e3d 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -111,17 +111,23 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { private class BurnTab extends JPanel { private static final long serialVersionUID = 1L; - + private Thread currentThread; + public BurnTab() { setLayout(new BorderLayout()); setName("Burn"); reBurn(); } + + private class BurnCanceled extends RuntimeException{ + private static final long serialVersionUID = 1L; + }; public void reBurn() { removeAll(); - new Thread() { + currentThread = new Thread() { public void run() { + final Thread me = this; final JProgressBar bar = new JProgressBar(0, 100); add(bar, BorderLayout.NORTH); try { @@ -130,6 +136,9 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { @Override public void setProgress(float f) { bar.setValue((int) (f * 100)); + if ( currentThread != me ){ + throw new BurnCanceled(); + } } }); @@ -146,6 +155,8 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { revalidate(); } }); + } catch (BurnCanceled c){ + System.err.println("Burn Canceled!"); } catch (Exception e) { remove(bar); JTextArea t = new JTextArea(e.getMessage()); @@ -153,7 +164,8 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { add(t); } } - }.start(); + }; + currentThread.start(); } }