जावा 14 nullpointerexception कोई विस्तृत संदेश नहीं


10

जावा 14 में कई नई विशेषताएं हैं। उनमें से एक NullPointerException में विस्तृत संदेश दिखा रहा है। मैंने जावा 14 स्थापित किया और कक्षा के नीचे संकलन और चलाने की कोशिश कर रहा हूं लेकिन मुझे कोई विस्तृत संदेश नहीं मिल रहा है। क्या मुझे कुछ याद आ रहा है? कृपया मदद कीजिए।

~/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)

मैं सुझाव दे रहा हूं -XX: + ShowCodeDetailsInExceptionMessages फ्लैग टू जावा लेकिन कोई विस्तृत संदेश नहीं है। कृपया मदद कीजिए।


क्या आपने सुनिश्चित किया है कि आपका javacसंस्करण 14 है?
रियलसेप्टिक

2
आप OpenJ9 का उपयोग कर रहे हैं। इस बग को
जोहान्स कुह्न

जवाबों:


8

OpenJ9 वर्तमान में JEP 358 का समर्थन नहीं करता है :

NullPointerExceptionअभी तक लागू नहीं किए गए के लिए विस्तारित संदेश

JEP 358: मददगार NullPointerExceptionNullPointerException जावा 14 वीएम द्वारा उत्पन्न होने पर विस्तारित संदेश प्रदान करता है और आपने सुविधा को सक्षम कर दिया है। हालाँकि, ध्यान रखें कि यह इस समय OpenJ9 में लागू नहीं है।

इस बग में प्रगति का पता लगाया जाता है

यदि आप इस सुविधा का उपयोग करना चाहते हैं, तो गोद लेने वाले संस्करण को गोद लेने वाले संस्करण से डाउनलोड करें। यह आपके वर्तमान वितरण के समान विक्रेता है, इसलिए यह केवल एक छोटा सा परिवर्तन है।


यह इंगित करने के लिए धन्यवाद। उन्हें OpenJDK के जारी नोटों में इस बिंदु का उल्लेख करना चाहिए था। openjdk.java.net/projects/jdk/14
प्रदीप

2
@ प्रदीप ओपेनजे 9 को ओरेकल द्वारा विकसित किया गया है, न कि ओरेकल।
स्लाव

1
@ प्रदीप OpenJ9, OpenJDK जैसी परियोजना नहीं है।
मार्क रोटेवेल

-1

मैं इसे यहां स्पष्टीकरण के लिए रख रहा हूं, क्योंकि ओपी ने यह नहीं कहा कि अपेक्षित आउटपुट क्या है।

निम्नलिखित उदाहरण काम करता है क्योंकि यह हॉटस्पॉट jvm का उपयोग कर रहा है।

public class Exceptional{
    public static void main(String[] args){
        String a = null;
        try{
            System.out.println(a.length());
        } catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
}

यह बहुत समान कार्यक्रम है, सिवाय इसके कि यह केवल संदेश दिखा रहा है।

~/local/jdk-14+36/bin/java Exceptional.java 

शून्य

जब अतिरिक्त तर्क के साथ चलाते हैं।

 ~/local/jdk-14+36/bin/java -XX:+ShowCodeDetailsInExceptionMessages Exceptional.java

"String.length ()" को लागू नहीं किया जा सकता क्योंकि "" शून्य है

तर्क हॉटस्पॉट jvm पर स्टैकट्रेस को भी प्रभावित करता है।

जब अतिरिक्त तर्क के बिना चलाया जाता है:

अपवाद में अपवाद "मुख्य" java.lang.NullPointerException पर असाधारण .ain (असाधारण। Java:6)

और तर्क से चलें:

थ्रेड "मुख्य" java.lang.NullPointerException में अपवाद: "String.length ()" को लागू नहीं कर सकता क्योंकि "असाधारण" है (असाधारण। Java:6)

मैंने गलत तरीके से सोचा था कि स्टैक ट्रेस नहीं बदल सकता है क्योंकि इसमें पहले से ही कोड के बारे में अतिरिक्त जानकारी शामिल है। जैसा कि अन्य उत्तर बताते हैं, यह एक बग है जिसे ओपनज 9 जेवीएम में संबोधित किया जा रहा है।


1
इसका उत्तर नहीं है कि WHY op को कोई सहायक nullpointerexception नहीं मिलता है। बस "अरे, आप अपने कोड में संदेश प्राप्त कर सकते हैं e.getMessage()"।
जोहान्स कुह्न

@JohannesKuhn हालांकि यह नहीं है? वे अपवाद बुलबुले को एक अपवाद के रूप में छोड़ रहे हैं, जहां तर्क अपवाद संदेश को संशोधित कर रहा है। इसलिए मैं दिखा रहा हूं कि संदेश बदल रहा है।
मैट

1
समस्या कहीं और है। यहां तक ​​कि अगर op आपके कोड को चलाता है, तो यह परिणाम (हमेशा nullसंदेश के रूप में) को नहीं बदलता है
जोहान्स कुह्न

1
से संदेश e.getMessage()स्टैक ट्रेस में दिखाया गया है, तो आप अपवाद नहीं पकड़ ही एक होना चाहिए - जब तक आप इस परीक्षण किया है और यह बनाम यह पकड़ने नहीं पकड़ने के बीच संदेश में एक फर्क देखा होगा, तो मुझे नहीं लगता कि इसे पकड़ने से प्रश्न में समस्या का समाधान होता है।
काया ३

@ kaya3 सच है, मैंने इसे स्टैक ट्रेस संस्करण के व्यवहार को भी शामिल करने के लिए अद्यतन किया है।
मैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.