diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationEditDialog.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationEditDialog.java index 7955bdae3..287182c92 100644 --- a/swing/src/net/sf/openrocket/gui/simulation/SimulationEditDialog.java +++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationEditDialog.java @@ -209,12 +209,10 @@ public class SimulationEditDialog extends JDialog { @Override public void actionPerformed(ActionEvent e) { copyChangesToAllSims(); - SimulationRunDialog.runSimulations(parentWindow, SimulationEditDialog.this.document, simulationList); - refreshView(); - if (allowsPlotMode()) { + SimulationRunDialog dialog = SimulationRunDialog.runSimulations(parentWindow, SimulationEditDialog.this.document, simulationList); + if (allowsPlotMode() && dialog.isAllSimulationsSuccessful()) { + refreshView(); setPlotMode(); - } else { - setVisible(false); } } }); diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java index 44416bf24..22b4cb2c3 100644 --- a/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java +++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java @@ -207,9 +207,12 @@ public class SimulationRunDialog extends JDialog { * the parent Window of the dialog to use. * @param simulations * the simulations to run. + * @return the simulation run dialog instance. */ - public static void runSimulations(Window parent, OpenRocketDocument document, Simulation... simulations) { - new SimulationRunDialog(parent, document, simulations).setVisible(true); + public static SimulationRunDialog runSimulations(Window parent, OpenRocketDocument document, Simulation... simulations) { + SimulationRunDialog dialog = new SimulationRunDialog(parent, document, simulations); + dialog.setVisible(true); + return dialog; } private void updateProgress() { @@ -257,6 +260,18 @@ public class SimulationRunDialog extends JDialog { + u.toStringUnit(simulationMaxVelocity[index]) + ")"); } + /** + * Returns true if all the simulations ran successfully. Returns false if the simulations encountered + * an exception, or were cancelled. + */ + public boolean isAllSimulationsSuccessful() { + for (SimulationWorker w : simulationWorkers) { + if (w.getThrowable() != null) + return false; + } + return true; + } + /** * A SwingWorker that performs a flight simulation. It periodically updates * the simulation statuses of the parent class and calls updateProgress(). diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationWorker.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationWorker.java index 201b4f22e..1fb6b682b 100644 --- a/swing/src/net/sf/openrocket/gui/simulation/SimulationWorker.java +++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationWorker.java @@ -70,6 +70,17 @@ public abstract class SimulationWorker extends SwingWorker