2014-07-25 6 views
5

Für die runnable Jar programs ich erstelle, kann ich die unbehandelten Ausnahmen lesen, wenn ich es von der Eingabeaufforderung (java -jar myprogram.jar) ausführen.Wie mache ich Runnable-Jar-Programme, die nicht stumm ausfallen?

Beispielcode:

public static void main(String args[]) { 
    try { 
     EntireProgram(); 
    } catch (Throwable t) { 
     throw new Error("somehow our error handling code has errors"); 
    } 
} 

public static void EntireProgram() { 
    System.out.println(1/0); 
} 

Befehlszeile Ausgabe:

enter image description here

Allerdings, wenn ich die Jar Programm durch Doppelklick (erwartet der meisten Endnutzer) laufen bleiben die unbehandelten Ausnahmen silent. Ich habe bemerkt, dass dies im Gegensatz zu „native Windows-Programmen“ ist, die ich von den OS Standard-Handler (modale Dialognachricht) behandelten unbehandelte Ausnahmen glauben:

enter image description here

enter image description here enter image description here

Die Vorteil der Behandlung von unbehandelten Ausnahmen auf diese Weise ist, dass der Benutzer weiß, etwas falsch ist passiert ist (und vielleicht melden, hoffentlich).

Wie kann ich die unbehandelten Ausnahmen meines Programms so behandeln?

Antwort

1

Warum fügen Sie nicht eine einzelne Zeile in Ihrem catch-Block hinzu ..., die Ihnen die Fehlermeldung zeigt, unabhängig davon, wie Sie Ihre App ausführen.

javax.swing.JOptionPane.showMessageDialog(null,"Something is really wrong..Hence notifying you.."); 
+1

Ich glaube nicht, dass das funktioniert. Ich steckte in einem Problem fest, wo meine 'swing'-basierte Anwendung' Java1.6' und höher benötigt, aber als ich diese Anwendung in der niedrigeren Version von Java ausführte, zeigte sie nichts, sogar ich hatte 'showMessageDialog' in catch gegeben blockieren, da ein Fehler namens 'ClassNotFoundError' aufgetreten ist. – Vishrant

+0

@ user3505725, Es wird * immer noch Fehler geben. Wir können nicht erwarten, dass Code fehlerfrei ist, daher können wir nicht erwarten, dass Fehlerbehandlungscode (der showMessageDialog) fehlerfrei ist. Wie verlagern wir die Verantwortung für die Fehlerbehandlung auf das Betriebssystem? – Pacerier