Beenden Sie eine Anwendung, die anmutig?

Ich habe eine Anwendung mit einem definierten Try/Catch/Finally-Kette, die Ausfahrten und führt finally-block nur in Ordnung, unter normalen Bedingungen, aber wenn jemand vorzeitig, trifft das rote X in der GUI, das Programm komplett vorhanden (code = 0) und der Haupt-thread der finally-block nicht aufgerufen.

In der Tat, ich will das Programm beenden nach einem Klick auf das rote X, was ich aber nicht wollen, ist ein überspringen des finally {} - block! Ich Sortiere von darlegte in den wichtigsten Teil der finally-block manuell in der GUI, aber ich weiß wirklich nicht wollen, es zu tun auf diese Weise, da ich möchte das GUI entkoppelt vom eigentlichen Programm:

class GUI { //...
...
mainFrame.addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent evt) {
    try {
      processObject.getIndicatorFileStream().close();
    } catch (Exception ignore) {}
    System.exit(0);
  }
});
...
}

Aber ich würde es vorziehen, um einfach nur ein Aufruf wie dieser:

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Und stellen Sie sicher, dass alle endlich {} - blocks aufgerufen werden, aus jedem thread, der nach der Ausfahrt.

Ich weiß, das ist eigentlich erwartet. Wenn die Anwendung geschlossen wird von einem separaten thread (also der GUI-thread), dann wird der Haupt-thread wird nur zu stoppen in Ihren tracks.

In kurz-wie kann ich sicherstellen, dass eine System.beenden(0) oder ein JFrame.EXIT_ON_CLOSE werden immer noch bewirken, dass jeder thread der finally-block ausgeführt?

InformationsquelleAutor E.S. | 2013-07-22
Schreibe einen Kommentar