Ich weiss ist ne blöde Frage, doch ich wunder mich gerade wieso sich die javax.exe immernoch im Taskmanager befindet wenn ich meine Applikation beende. Sie wirft keine Exceptions und abundzu wird das Programm auch im Taskmanager geschlosen nur teilweise auch nicht. Wer kann mir eine mögliche Ursache nennen?
Durch schließen des Fensters. JFrame.EXIT_on_Close, teilweise wird der Prozess auch gekillt nur halt leider "teilweise" was unvorteilhaft bei einer Netzwerkapp ist.
Ja habe ich versucht, ist aber kein Unterschied. Und ja ich habe einen Thread am laufen. Aber dieser sollte sich doch terminieren wenn ich das Programm schließe, tut er ja auch teilweise.
System.exit sollte man nur in Notfällen nutzen meiner Meinung nach und zwar genau dann, wenn man einen speziellen Exit-Code braucht. Als generelles Mittel zum Zweck ist es nicht gedacht.
Wenn ein GUI Programm sich nicht beenden mag, ist ein Programmierfehler drin!
Ja habe ich versucht, ist aber kein Unterschied. Und ja ich habe einen Thread am laufen. Aber dieser sollte sich doch terminieren wenn ich das Programm schließe, tut er ja auch teilweise.
Nicht immer. Erstens muss der Prozess so eingestellt sein, dass er sich beim Programmende automatisch beendet und zweitens geht das auch nur, wenn du z.B. sauber beendest.
Am Besten arbeitet man mit Threads wenn man der Klasse (z.B. dem Runnable) eine Methode "shutdown" mit gibt welche dem Thread sagt "bitte mach mal noch fix die Arbeit fertig und geh dann an einem Safepoint aus".
Dieser Safepoint könnte z.B. die gerade zu bearbeitende Transaktion oder ähnliches sein.
Einen Thread abschießen ist immer unschön.
Java:
classTaskimplementsRunnable{privatefinalAtomicBoolean stop =newAtomicBoolean(false);publicvoidrun(){for(int i =0; i <100000; i++){Transaction transaction =Transaction.begin();try{...long work
transaction.commit();}catch(Exception){
transaction.rollback();}// Safepoint weil Transaction durchif(stop.get()){return;}}}publicvoidshutdown(){
stop.set(true);}}
Und wie schauts aus wenn der Thread durchgehend laufen muss, bis das Programm wirklich beendet wird durch das "X" ? Er hat keine Zeitliche Einschränkung, dass Abbruchkriterium ist das Programmende.
Hab oben mal nachbearbeitet. Du rufst im Close-Handler die Methode shutdown() des Tasks auf und dieser sucht den nächsten Safepoint und beendet sich dann. Im schlimmsten Fall hast du bei dieser Methode einen Thread der ein paar Sekunden länger läuft als der Rest des Programms bevor er ausgeht. Dafür hast du sichere Datenkonsistenz.