1

Angenommen, in Ihrem Programm könnten Sie eine IndexOutOfBoundsException erhalten. Ich bin Umgang es auf folgende Weise:So zeigen Sie eine detaillierte Fehlermeldung mit try {} catch() {} Blöcke an

try{ 
//throws an IndexOutOfBoundsException during runtime 
}catch(IndexOutOfBoundsException ex){ 
System.err.println(ex); 
} 

Dieses nur java.lang.IndexOutOfBoundsException angezeigt wird. Aber ich möchte eine detaillierte Fehlermeldung anzeigen (die das Programm nicht beendet), wie die, die java uns gibt (lineNumber, fileName, etc.), wenn wir den Fehler nicht behandeln und somit das Programm beenden.

+2

Verwendung ex.printStackTrace() –

Antwort

1

In Java können Sie printStackTrace für jedes Ausnahmeobjekt verwenden, um die Stack-Ablaufverfolgung von Java gedruckt zu bekommen. In Ihrem Fall eines minimal:

try { 
    // Throw an IndexOutOfBoundsException 
} catch (IndexOutOfBoundsException ex) { 
    ex.printStackTrace(); 
} 

Dieser druckt den Stack-Trace zu System.err. Sie können auch einen Druckstrom oder sogar System.out übergeben, um diesen bestimmten Stream zu drucken.

Außerdem, wenn Sie Java-Logger verwenden, können Sie verwenden:

logger.log(<LOG_LEVEL>, <LOG_MESSAGE>, ex); 

die Ausnahme zu protokollieren. Weitere Informationen finden Sie unter: https://docs.oracle.com/javase/7/docs/api/java/util/logging/Logger.html

-1

können Sie verwenden

ex.GetMessage() 

Dank

+0

sagt "kann Symbol nicht gefunden" ich denke, die Methode sollte ex.getMessage(), aber Trotzdem bekomme ich keine Details über den Fehler. Tatsächlich bekomme ich überhaupt keine Fehlermeldung:/ –

+0

Dies beantwortet die Frage des Benutzers nicht. –

2

Verwenden ex.printStackTrace() Methode, um die Ausnahme zu drucken:

try { 
    int[] x = new int[1]; 
    x[2] = 5; 
} catch (IndexOutOfBoundsException ex) { 
    ex.printStackTrace(); 
} 
System.err.println("Program completed successfully"); 

Demo.

Wenn Sie in einer Umgebung arbeiten, wo Konsole ausgegeben nicht wünschenswert, rufen Sie ex.getStackTrace() und zeigen Elemente auf eine Weise an, die mit der Benutzeroberfläche Ihres Programms übereinstimmt.

+0

das war sehr hilfreich Bruder :) aber das druckt zu viele Informationen aus. Ich möchte, dass die Fehlermeldung wie die ist, die Java gibt. java.lang.ArrayIndexOutOfBoundsException: 6 \t bei sth.main (sth.java:15) \t bei sun.reflect.NativeMethodAccessorImpl.invoke0 (native Methode) \t bei sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) \t bei sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) \t bei java.lang.reflect.Method.invoke (Unknown Source) \t bei edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand (JavacCompiler.java:266) –

+0

herausgefunden, wie die oben genannten Zeilen angezeigt werden. : D –

0

Haben Sie dies von einem meiner Lehrer. Könnte für andere Anfänger wie mich hilfreich sein. (Dies ist kein Teil irgendeines hw/Belegung/etc. Neugierde.)

public class ExceptionDemo{ 
public static void main(String[] args){ 
    int[] array = new int[2]; 
    try { 
     System.out.println(array[100]);//non-existent 
    } catch (IndexOutOfBoundsException ex){ 
     StackTraceElement[] e = ex.getStackTrace(); 
     System.err.println("Got error= " + ex + "\n"+ 
          "in file "+e[0].getFileName() +"\n"+ 
          "in class "+e[0].getClassName() +"\n"+ 
          "in method "+e[0].getMethodName() +"\n"+ 
          "in line "+e[0].getLineNumber()); 
     System.err.println("Full trace= "); 
     ex.printStackTrace(System.err); 
    } 
    System.out.println("As Salamu Alaikum"); 
    } 
}