From 0b5e99178908dbcb2627838a083df79b00a55bce Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Sun, 30 Aug 2009 19:40:16 +0000 Subject: [PATCH] Added cancelation of previous burn calculation when you change the motor --- .../motorsim/visual/workbench/MotorEditor.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) 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(); } } -- 2.47.2