2016-07-09 20 views
0

Iam versucht, einen "Catch all" Code, um eine Ausnahme in meinem Code zu fangen, so dass es an den Server gesendet werden kann. Grundsätzlich ist der folgende Code der Code meines Main. Dies erzeugt einen Jframe mit Schaltflächen. Wenn ich auf eine der Schaltflächen klicke, verursache ich einen Absturz (Dereferenzierung eines Nullzeigers). Diese Ausnahme wird jedoch nicht im unten stehenden Code abgefangen und stattdessen in meiner Konsole angezeigt.Catch All Exceptions Code in der Main ist kein Ereignis Ausnahmen fangen

public static void main(String args[]) { 

     try { 


     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 

        JFRAME_MAIN = new MainHomePage(); 
        JFRAME_MAIN.setVisible(true); 

      } 
     }); 

     } catch (Exception ex) { 

      System.out.println("Exception caught"); // <--- This is not being hit 
     } 

} 

Irgendeine Idee warum oder wie man das löst?

Dank

PS: ich den Code der Klasse MainHomePage setzen didnt, weil es große Klasse, das Setup-Layout und fügen Sie Schaltflächen mit ihrer Aktion Hörer ist. In einem dieser Listener habe ich den Absturz passiert

Antwort

1

Die Ausnahme wird nicht abgefangen, weil es nicht durch den Code in Ihrem try-catch-Block ausgelöst wird. Der Button Klick wird von diesem Code nicht behandelt, er wird von einem ActionListener verarbeitet. Der Code im Listener löst die Ausnahme aus.

Die Methode invokeLater fügt einfach einen Runnable in die Warteschlange ein, der Vorgang des Hinzufügens von Runnable ist erfolgreich und generiert daher keine Ausnahme. Siehe this page.

Fügen Sie einen try-catch innerhalb Ihres Listener-Codes hinzu, der Ihren Button-Klick handhabt und Sie sollten in der Lage sein, die Exception abzufangen - suchen Sie nach einer actionPerformed Methode.

public void actionPerformed(ActionEvent e) { 
    try{ 
     // your logic here 
    } 
    catch(Exception e){ 
     // do something to handle the exception here 
    } 
} 

EDIT (reagiert auf Kommentar):

Wenn Sie alle nicht abgefangene Ausnahmen in einem einzigen Ort zu handhaben möchten, dass Sie so etwas tun könnte:

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
    public void uncaughtException(Thread t, Throwable e) { 
     System.out.println("Caught exception: "+e.getClass().getName()); 
     // do something else useful here 
    } 
}); 

Sie würden Platz, Code innerhalb Ihrer Hauptmethode.

+0

Vielen Dank für Ihre Antwort. Aber ich habe so viele Hörer km meinen Code, muss ich jedem von ihnen hinzufügen? Gibt es keine Möglichkeit, es zu einem einzigen Ort hinzuzufügen, so dass ich jede Ausnahme, die von meiner Anwendung ausgelöst wird, erhalte? – Snake

+0

Ich werde meine Antwort bearbeiten, um auf Ihren Kommentar zu antworten. –

+0

Das ist es .. Danke vielmals – Snake