Java 14 memiliki banyak fitur baru. Salah satunya adalah menampilkan pesan terperinci di NullPointerException. Saya menginstal Java 14 dan mencoba untuk mengkompilasi dan menjalankan di bawah kelas tetapi saya tidak mendapatkan pesan rinci. Apakah saya kehilangan sesuatu? tolong bantu.
~/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)
Saya lewat menyarankan flag -XX: + ShowCodeDetailsInExceptionMessages ke java tetapi tidak ada pesan terperinci. Tolong bantu.
javac
adalah versi 14?Jawaban:
OpenJ9 saat ini tidak mendukung JEP 358 :
Kemajuan dilacak dalam bug ini
Jika Anda ingin menggunakan fitur ini, unduh varian hotspot dari adoptopenjdk. Ini vendor yang sama dengan distribusi Anda saat ini, jadi ini hanya perubahan kecil.
sumber
Saya menyimpan ini di sini untuk klarifikasi, karena OP tidak mengatakan apa output yang diharapkan.
Contoh berikut berfungsi karena menggunakan hotspot jvm.
Program ini hampir sama, kecuali hanya menunjukkan pesannya saja.
Saat dijalankan dengan argumen tambahan.
Argumen ini juga memengaruhi stacktrace pada hotspot jvm.
Saat dijalankan tanpa argumen tambahan:
Dan jalankan dengan argumen:
Saya salah mengira jejak stack mungkin tidak berubah karena sudah menyertakan informasi tambahan tentang kode. Seperti jawaban lain tunjukkan, itu adalah bug yang sedang ditangani di openj9 jvm.
sumber
e.getMessage()
".null
sebagai pesan)e.getMessage()
harus sama dengan yang ditampilkan di jejak tumpukan jika Anda tidak menangkap pengecualian - kecuali Anda telah menguji ini dan mengamati perbedaan dalam pesan antara menangkap dan tidak menangkapnya, maka saya tidak berpikir menangkapnya mengatasi masalah dalam pertanyaan.