Hallo nochmal,
es gibt noch ein kleines Problem mit meiner GUI. Sie enthält mehrere Buttons, unter anderem einen Start- und Stop-Button.
Wenn der Startbutton gedrückt wurde, sollen gewisse Elemente und Actionlistener der GUI deaktiviert werden und das Programm gestartet werden.
Wenn der Stopbutton gedrückt wurde, sollen die Elemente wieder aktiviert werden. Weiters wird ein Parameter gesetzt der an andereren Stellen des Programms geprüft wird und gegebenfalls werden keine weiteren Schritte mehr durchgeführt. Dieses Prüfen wird allerdings über eine Variable gemacht und nicht per Überprüfung ob der Thread noch läuft (denn ursprünglich hatte ich diesen gar nicht).
So, nun habe ich aber einen Thread starten müssen, da sonst die GUI-Elemente nicht direkt nach Klick aktualisiert werden. Das Ganze sieht jetzt so aus:
Das funktioniert so genau so wie ich das möchte. Allerdings ist stop() ja deprecated. Führe ich nur ein interrupt() aus, so wird das deaktivieren der GUI-Elemente und Actionlistener nicht in allen Fällen korrekt durchgeführt und es existieren dann noch Actionlistener, die eigentlich nach dem Stop weg sein sollten.
Wahrscheinlich kann hier mit dem stop nicht viel "passieren", da außer an diesen zwei Stellen nicht mit dem Thread gearbeitet wird (in weiteren Schleifen und Programmteilen wird ja immer der Parameter stopSimulation überprüft, und nicht der Thread selbst).
Aber da ich damit nicht sonderlich viel Erfahrung habe, bin ich trotzdem nicht wirklich sicher, ob ich das so lassen kann, mit dem stop(). Gibt es da eine bessere Möglichkeit?
Sollte ich vielleicht auch überhaupt "alles" umbauen, sodass der Parameter nicht mehr verwendet wird und an anderen Programmstellen immer der Thread überprüft wird? Ich finde es ja so herum einfacher und ursprünglich gab es wie gesagt keinen Thread ... aber jetzt ist die Information wohl irgendwie "doppelt" ... von daher bin ich unsicher ob das nicht eher "doof" ist, so wie es im Moment ist. Und dann ist ja da eben noch das stop-Problem ...
Sorry, von threads habe ich einfach gar keine Ahnung!
Aber hoffentlich kommt von Euch noch jemand mit, was ich da überhaupt mache ...
Liebe Grüße
sunny
es gibt noch ein kleines Problem mit meiner GUI. Sie enthält mehrere Buttons, unter anderem einen Start- und Stop-Button.
Wenn der Startbutton gedrückt wurde, sollen gewisse Elemente und Actionlistener der GUI deaktiviert werden und das Programm gestartet werden.
Wenn der Stopbutton gedrückt wurde, sollen die Elemente wieder aktiviert werden. Weiters wird ein Parameter gesetzt der an andereren Stellen des Programms geprüft wird und gegebenfalls werden keine weiteren Schritte mehr durchgeführt. Dieses Prüfen wird allerdings über eine Variable gemacht und nicht per Überprüfung ob der Thread noch läuft (denn ursprünglich hatte ich diesen gar nicht).
So, nun habe ich aber einen Thread starten müssen, da sonst die GUI-Elemente nicht direkt nach Klick aktualisiert werden. Das Ganze sieht jetzt so aus:
Java:
private void startActionPerformed(java.awt.event.ActionEvent evt) {
t = new Thread(new Runnable() {
public void run() {
start.setEnabled(false);
stop.setEnabled(true);
par.setStopSimulation(false);
activateInput(false);
sim.startSim();
}
}
});
t.start();
}
private void stopActionPerformed(java.awt.event.ActionEvent evt) {
t.stop();
start.setEnabled(true);
activateInput(true);
par.setStopSimulation(true);
}
Das funktioniert so genau so wie ich das möchte. Allerdings ist stop() ja deprecated. Führe ich nur ein interrupt() aus, so wird das deaktivieren der GUI-Elemente und Actionlistener nicht in allen Fällen korrekt durchgeführt und es existieren dann noch Actionlistener, die eigentlich nach dem Stop weg sein sollten.
Wahrscheinlich kann hier mit dem stop nicht viel "passieren", da außer an diesen zwei Stellen nicht mit dem Thread gearbeitet wird (in weiteren Schleifen und Programmteilen wird ja immer der Parameter stopSimulation überprüft, und nicht der Thread selbst).
Aber da ich damit nicht sonderlich viel Erfahrung habe, bin ich trotzdem nicht wirklich sicher, ob ich das so lassen kann, mit dem stop(). Gibt es da eine bessere Möglichkeit?
Sollte ich vielleicht auch überhaupt "alles" umbauen, sodass der Parameter nicht mehr verwendet wird und an anderen Programmstellen immer der Thread überprüft wird? Ich finde es ja so herum einfacher und ursprünglich gab es wie gesagt keinen Thread ... aber jetzt ist die Information wohl irgendwie "doppelt" ... von daher bin ich unsicher ob das nicht eher "doof" ist, so wie es im Moment ist. Und dann ist ja da eben noch das stop-Problem ...
Sorry, von threads habe ich einfach gar keine Ahnung!
Aber hoffentlich kommt von Euch noch jemand mit, was ich da überhaupt mache ...
Liebe Grüße
sunny