diff --git a/swing/src/net/sf/openrocket/gui/plot/SimulationPlot.java b/swing/src/net/sf/openrocket/gui/plot/SimulationPlot.java index e80cd4735..1714fbd6f 100644 --- a/swing/src/net/sf/openrocket/gui/plot/SimulationPlot.java +++ b/swing/src/net/sf/openrocket/gui/plot/SimulationPlot.java @@ -25,7 +25,6 @@ import net.sf.openrocket.simulation.FlightDataType; import net.sf.openrocket.simulation.FlightEvent; import net.sf.openrocket.unit.Unit; import net.sf.openrocket.unit.UnitGroup; -import net.sf.openrocket.util.Coordinate; import net.sf.openrocket.util.LinearInterpolator; import net.sf.openrocket.utils.DecimalFormatter; 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 3288c753a..63ac79c29 100644 --- a/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java +++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationRunDialog.java @@ -209,9 +209,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() { @@ -259,6 +262,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