bile
Mitglied
Tag auch...
ich hab momentan ein kleines Problem... es geht um eine Conways Game of Life Simulation, bei der man sich erst durch ein paar Menus klickt, eine Startkonfiguration lädt und dann startet...
Grundlegender Aufbau:
- Ein paar JFrames, die sich gegenseitig aufrufen und visible resp. invisible setzten als Menu...
- Dann per JFileChooser die Startkonfiguration wählen...
- Dann wird ein neues JFrame angezeigt, welches ein JPanel mit überschriebener paint() Funktion enthält (nennen wir die Instanz area).
und dann vermutlich hier das Problem:
- ich starte einen neuen Thread und rufe darin die runMachine() - Methode von area auf:
area.setVisible(true);
die runMachine()-Methode macht nichts anderes als folgendes (wobei frame = das JFrame, das area beinhaltet):
Die Animation funktioniert auch ohne sichtbare Probleme. Wenn ich nun aber das JFrame schliesse (EXIT_ON_CLOSE), dann wird die VM nicht abgewürgt und es bleibt mir irgend ein Zombie-Thread im TaskManager hängen....
Ich weiss, dass Swing nicht Thread-save ist... aber falls irgendwer grad eine Mr.-Obvious-Idee dazu hat, woran es liegen könnte, würd ich mich gerne belehren lassen...
Danke
.bile
ich hab momentan ein kleines Problem... es geht um eine Conways Game of Life Simulation, bei der man sich erst durch ein paar Menus klickt, eine Startkonfiguration lädt und dann startet...
Grundlegender Aufbau:
- Ein paar JFrames, die sich gegenseitig aufrufen und visible resp. invisible setzten als Menu...
- Dann per JFileChooser die Startkonfiguration wählen...
- Dann wird ein neues JFrame angezeigt, welches ein JPanel mit überschriebener paint() Funktion enthält (nennen wir die Instanz area).
und dann vermutlich hier das Problem:
- ich starte einen neuen Thread und rufe darin die runMachine() - Methode von area auf:
area.setVisible(true);
Java:
Thread t = new Thread() {
public void run() {
area.runMachine();
}
};
t.start();
die runMachine()-Methode macht nichts anderes als folgendes (wobei frame = das JFrame, das area beinhaltet):
Java:
public void runMachine() {
while(frame.isVisible()) {
calculateNextRound();
SwingUtilities.invokeLater( new Runnable() {
public void run() {
area.repaint();
}
});
}
}
Die Animation funktioniert auch ohne sichtbare Probleme. Wenn ich nun aber das JFrame schliesse (EXIT_ON_CLOSE), dann wird die VM nicht abgewürgt und es bleibt mir irgend ein Zombie-Thread im TaskManager hängen....
Ich weiss, dass Swing nicht Thread-save ist... aber falls irgendwer grad eine Mr.-Obvious-Idee dazu hat, woran es liegen könnte, würd ich mich gerne belehren lassen...
Danke
.bile