Java 14 hat viele neue Funktionen. Eine davon zeigt eine detaillierte Nachricht in NullPointerException an. Ich habe Java 14 installiert und versucht, unter der Klasse zu kompilieren und auszuführen, erhalte jedoch keine detaillierte Meldung. Vermisse ich etwas Bitte helfen Sie.
~/code/demo/temp$ java -version
openjdk version "14" 2020-03-17
OpenJDK Runtime Environment AdoptOpenJDK (build 14+36)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.19.0, JRE 14 Mac OS X amd64-64-Bit Compressed References 20200313_47 (JIT enabled, AOT enabled)
OpenJ9 - 0133ba037
OMR - 1c04e0ef9
JCL - a73be60649 based on jdk-14+36)
~/code/demo/temp$ cat Hello.java
public class Hello {
public static void main(String args[]) {
String a = null;
System.out.println(a.length());
}
}
~/code/demo/temp$ javac Hello.java
~/code/demo/temp$ java -XX:+ShowCodeDetailsInExceptionMessages Hello
Exception in thread "main" java.lang.NullPointerException
at Hello.main(Hello.java:4)
Ich übergebe das vorgeschlagene Flag -XX: + ShowCodeDetailsInExceptionMessages an Java, aber es gibt keine detaillierte Nachricht. Bitte helfen Sie.
javac
es sich um Version 14 handelt?Antworten:
OpenJ9 unterstützt derzeit JEP 358 nicht :
Der Fortschritt wird in diesem Fehler verfolgt
Wenn Sie diese Funktion verwenden möchten, laden Sie die Hotspot-Variante von adoptopenjdk herunter. Es ist derselbe Anbieter wie Ihre aktuelle Distribution, daher ist dies nur eine kleine Änderung.
quelle
Ich behalte dies hier zur Klarstellung, da das OP nicht gesagt hat, wie hoch der erwartete Output ist.
Das folgende Beispiel funktioniert, weil der Hotspot jvm verwendet wird.
Dies ist so ziemlich das gleiche Programm, außer dass nur die Nachricht angezeigt wird.
Wenn mit dem zusätzlichen Argument ausgeführt.
Das Argument wirkt sich auch auf den Stacktrace auf dem Hotspot-JVM aus.
Bei Ausführung ohne zusätzliches Argument:
Und laufen Sie mit dem Argument:
Ich habe fälschlicherweise gedacht, dass sich der Stack-Trace möglicherweise nicht ändert, da er bereits zusätzliche Informationen zum Code enthält. Wie die andere Antwort zeigt, handelt es sich um einen Fehler, der im openj9-JVM behoben wird.
quelle
e.getMessage()
".null
als Nachricht)e.getMessage()
sollte dieselbe sein, die im Stack-Trace angezeigt wird, wenn Sie die Ausnahme nicht abfangen. Wenn Sie dies nicht getestet und einen Unterschied in der Nachricht zwischen dem Abfangen und dem Nichtabfangen festgestellt haben, denke ich nicht Wenn Sie es fangen, wird das Problem in der Frage behoben.