Fixed leaking threads in simulations
This commit is contained in:
parent
dabfa28b9d
commit
ac51ec6b5a
@ -1,3 +1,11 @@
|
|||||||
|
2012-03-13 Sampo Niskanne
|
||||||
|
|
||||||
|
* [BUG] Threads piled up when running simulations
|
||||||
|
|
||||||
|
2012-03-11 Sampo Niskanen
|
||||||
|
|
||||||
|
* Update copyright statements
|
||||||
|
|
||||||
2012-02-19 Sampo Niskanen
|
2012-02-19 Sampo Niskanen
|
||||||
|
|
||||||
* Display computed motor class
|
* Display computed motor class
|
||||||
|
@ -47,7 +47,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
private static final LogHelper log = Application.getLogger();
|
private static final LogHelper log = Application.getLogger();
|
||||||
private static final Translator trans = Application.getTranslator();
|
private static final Translator trans = Application.getTranslator();
|
||||||
|
|
||||||
|
|
||||||
/** Update the dialog status every this many ms */
|
/** Update the dialog status every this many ms */
|
||||||
private static final long UPDATE_MS = 200;
|
private static final long UPDATE_MS = 200;
|
||||||
|
|
||||||
@ -57,19 +57,15 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
/** Flight progress at apogee */
|
/** Flight progress at apogee */
|
||||||
private static final double APOGEE_PROGRESS = 0.7;
|
private static final double APOGEE_PROGRESS = 0.7;
|
||||||
|
|
||||||
|
|
||||||
/*
|
private final static ExecutorService executor = Executors.newFixedThreadPool(
|
||||||
* The executor service is not static since we want concurrent simulation
|
|
||||||
* dialogs to run in parallel, ie. they both have their own executor service.
|
|
||||||
*/
|
|
||||||
private final ExecutorService executor = Executors.newFixedThreadPool(
|
|
||||||
SwingPreferences.getMaxThreadCount());
|
SwingPreferences.getMaxThreadCount());
|
||||||
|
|
||||||
|
|
||||||
private final JLabel simLabel, timeLabel, altLabel, velLabel;
|
private final JLabel simLabel, timeLabel, altLabel, velLabel;
|
||||||
private final JProgressBar progressBar;
|
private final JProgressBar progressBar;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE: Care must be used when accessing the simulation parameters, since they
|
* NOTE: Care must be used when accessing the simulation parameters, since they
|
||||||
* are being run in another thread. Mutexes are used to avoid concurrent usage, which
|
* are being run in another thread. Mutexes are used to avoid concurrent usage, which
|
||||||
@ -85,7 +81,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
|
|
||||||
public SimulationRunDialog(Window window, Simulation... simulations) {
|
public SimulationRunDialog(Window window, Simulation... simulations) {
|
||||||
//// Running simulations...
|
//// Running simulations...
|
||||||
super(window, trans.get("SimuRunDlg.title.RunSim"), Dialog.ModalityType.DOCUMENT_MODAL);
|
super(window, trans.get("SimuRunDlg.title.RunSim"), Dialog.ModalityType.APPLICATION_MODAL);
|
||||||
|
|
||||||
if (simulations.length == 0) {
|
if (simulations.length == 0) {
|
||||||
throw new IllegalArgumentException("Called with no simulations to run");
|
throw new IllegalArgumentException("Called with no simulations to run");
|
||||||
@ -93,7 +89,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
|
|
||||||
this.simulations = simulations;
|
this.simulations = simulations;
|
||||||
|
|
||||||
|
|
||||||
// Randomize the simulation random seeds
|
// Randomize the simulation random seeds
|
||||||
for (Simulation sim : simulations) {
|
for (Simulation sim : simulations) {
|
||||||
sim.getOptions().randomizeSeed();
|
sim.getOptions().randomizeSeed();
|
||||||
@ -138,7 +134,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
progressBar = new JProgressBar();
|
progressBar = new JProgressBar();
|
||||||
panel.add(progressBar, "spanx, growx, wrap para");
|
panel.add(progressBar, "spanx, growx, wrap para");
|
||||||
|
|
||||||
|
|
||||||
// Add cancel button
|
// Add cancel button
|
||||||
JButton cancel = new JButton(trans.get("dlg.but.cancel"));
|
JButton cancel = new JButton(trans.get("dlg.but.cancel"));
|
||||||
cancel.addActionListener(new ActionListener() {
|
cancel.addActionListener(new ActionListener() {
|
||||||
@ -149,7 +145,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
});
|
});
|
||||||
panel.add(cancel, "spanx, tag cancel");
|
panel.add(cancel, "spanx, tag cancel");
|
||||||
|
|
||||||
|
|
||||||
// Cancel simulations when user closes the window
|
// Cancel simulations when user closes the window
|
||||||
this.addWindowListener(new WindowAdapter() {
|
this.addWindowListener(new WindowAdapter() {
|
||||||
@Override
|
@Override
|
||||||
@ -158,7 +154,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
this.add(panel);
|
this.add(panel);
|
||||||
this.setMinimumSize(new Dimension(300, 0));
|
this.setMinimumSize(new Dimension(300, 0));
|
||||||
this.setLocationByPlatform(true);
|
this.setLocationByPlatform(true);
|
||||||
@ -194,8 +190,8 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void updateProgress() {
|
private void updateProgress() {
|
||||||
int index;
|
int index;
|
||||||
for (index = 0; index < simulations.length; index++) {
|
for (index = 0; index < simulations.length; index++) {
|
||||||
@ -242,7 +238,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A SwingWorker that performs a flight simulation. It periodically updates the
|
* A SwingWorker that performs a flight simulation. It periodically updates the
|
||||||
* simulation statuses of the parent class and calls updateProgress().
|
* simulation statuses of the parent class and calls updateProgress().
|
||||||
|
Loading…
x
Reference in New Issue
Block a user