Halli Hallo
Eine Frage zum zeichnen von GUI Elementen innerhalb von Threads. Ich habe einen Knopf welcher die Anwendung schließt. Doch bevor das geschieht sollen verschiedene Objekte gefragt werden ob davor noch etwas zu erledigen ist. Sind alle Aufgaben erfüllt, soll wirklich der schließen-Befehl abgesetzt werden.
Mein Plan war nun ein Event zu erzeugen und an den entsprechenden Stellen abgefangen wird. Dort wird dann ein Thread erzeugt und einem ExecutorService übergeben, der die Aufgaben abareitet. Falls irgendwas schief geht und zu lange dauert besitzt dieser ein “awaitTermination”.
Mein Problem ist nun, das die GUI nur halbherzig aktualisiert wird. Genau genommen solange wie es eine “awaitTermination” gibt. Gibt es sie nicht dann läuft alles i.O. aber in der Theorie kann der Executor ja unendlich laufen.
Was ist hier die Lösung? Bisher sieht es in etwa so aus
class Main{
public void close(){
MyExecutor.create();
closeApp();
}
}
class MyExecutor{
public static void create(){
service = Executors.newSingleThreadedExecutor();
fireEvent(WILL_CLOSE);
closeService();
}
public static submit(Thread task){
services.submit(task);
}
private static void closeService(){
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}
}
class MyListener{
handleEvent(Event event){
Thread t = new Thread(){
run(){
JOptionPane.showDialog.....
}
}
MyExecutor.submit(t);
}
}
Das Dialogfenster wird zwar gezeichnet, ist aber halb transparent: