Hallo erstmal an Alle!
Schön in eurem Forum zu sein!
Ich komme momentan nich wirklich weiter, also folgendes:
Ich habe ein extra Fenster mit Fortschrittsbalken und "Abbruch"-Button, welches von einem anderen Fenster gleichzeitig mit einem anderen Thread, der Berechnungen durchführt, gestartet wird.
Das Problem ist, dass das Fenster nicht wieder geschlossen wird, wenn der BerechnungsThread zu schnell vorbei ist (z.B. bei 0 Berechnungen). Wenn es ein wenig Zeit dauert ist es kein Problem.
Das Problem ist hauptsächlich, dass ich ne Menge Umwege gehen muss, weil setVisible(true) blockierend ist, aber kenne keine andere Möglichkeit das zu lösen.
Hier der Code aus der Window mit dem Fortschrittsbalkem (welches geöffnet wird beim erstellen des Fensters und geschlossen wird wenn die Berechnung des anderen Threads fertig ist):
Hier noch ein Ausschnitt aus dem Thread, der das Window aufruft und die Berechnungen durchführt:
Kann natürlich auch sein, dass der Fehler an anderer Stelle im Programm sitzt, aber das könnte ich mir nicht erklären und ist damit ziemlich unwahrscheinlich.
Ich hoffe ihr könnt mir helfen!
CHRIS
Schön in eurem Forum zu sein!
Ich komme momentan nich wirklich weiter, also folgendes:
Ich habe ein extra Fenster mit Fortschrittsbalken und "Abbruch"-Button, welches von einem anderen Fenster gleichzeitig mit einem anderen Thread, der Berechnungen durchführt, gestartet wird.
Das Problem ist, dass das Fenster nicht wieder geschlossen wird, wenn der BerechnungsThread zu schnell vorbei ist (z.B. bei 0 Berechnungen). Wenn es ein wenig Zeit dauert ist es kein Problem.
Das Problem ist hauptsächlich, dass ich ne Menge Umwege gehen muss, weil setVisible(true) blockierend ist, aber kenne keine andere Möglichkeit das zu lösen.
Hier der Code aus der Window mit dem Fortschrittsbalkem (welches geöffnet wird beim erstellen des Fensters und geschlossen wird wenn die Berechnung des anderen Threads fertig ist):
Code:
private void showWorkingWindow(){
// Fortschritt-Fenster anzeigen
(new Thread("AtWorkingWindow"){
@Override
public void run() {
synchronized(syncObject){ // falls Fenster zu spät initialisiert
syncObject.notifyAll();
}
window.setVisible(true);
}
}).start();
}
/**
* schließt FortschrittsFenster, wenn schon offen
*/
public void hideWorkingWindow(){
synchronized(syncObject){ // falls Fenster zu spät initialisiert
while(!window.isVisible()){ // wenn Fenster noch nicht offen/sichtbar
try {
syncObject.wait();
} catch (InterruptedException e) {
System.err.println(e.toString() + "\t" + e.getCause() + "\t" + e.getStackTrace());
}
}
window.setVisible(false); // Fenster in Hintergrund/schließen
}
}
/**
* bricht die Berechnung ab
*/
private void abort(){
comparisionThreadGroup.interrupt();
window.setVisible(false); // Fenster in Hintergrund/schließen
}
Hier noch ein Ausschnitt aus dem Thread, der das Window aufruft und die Berechnungen durchführt:
Code:
workingWindow = new AtWorkingWindow(MainWindow.getWindow(), comparisionThreadGroup);
try {
// ...
// Berechnungen
// ...
workingWindow.hideWorkingWindow();
Kann natürlich auch sein, dass der Fehler an anderer Stelle im Programm sitzt, aber das könnte ich mir nicht erklären und ist damit ziemlich unwahrscheinlich.
Ich hoffe ihr könnt mir helfen!
CHRIS