Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मेरे पास यहां NullPointerException क्यों है?

अंधेरे में मूल कारण का शिकार करने के बजाय, मुझे लगता है कि यह समझाना बेहतर है कि एनपीई कैसे और क्यों होता है और उनसे कैसे बचा जा सकता है, ताकि ओपी अपनी छोटी सी समस्या का शिकार करने के लिए नए प्राप्त ज्ञान को लागू कर सके।

देखिए, वस्तु संदर्भ (चर) में या तो एक पूर्ण योग्य Object हो सकता है या बस कुछ नहीं , जो null . है ।

SomeObject someObject1 = new SomeObject(); // References something.
SomeObject someObject2 = null; // References nothing.

अब, यदि आप कुछ नहीं तक पहुँचने का प्रयास कर रहे हैं (null ), तो आपको निस्संदेह एक NullPointerException . मिलेगा , केवल इसलिए कि null कोई चर या तरीके नहीं हैं।

someObject1.doSomething(); // Works fine.
someObject2.doSomething(); // Throws NullPointerException.

इसका समाधान काफी सरल है। इसे मूल रूप से दो तरीकों से किया जा सकता है:या तो इसे तत्काल करके या केवल इसे अनदेखा करके।

if (someObject2 == null) {
    someObject2 = new SomeObject();
}
someObject2.doSomething(); // No NPE anymore!

या

if (someObject2 != null) {
    someObject2.doSomething(); // No NPE anymore!
}

एनपीई के मामले में, स्टैकट्रेस की पहली पंक्ति संख्या सटीक रेखा को इंगित करती है जहां यह हुआ है। आपने सचमुच कहा "लाइन 272 है admin.birthList.add(list1); ". इस पंक्ति में दो . शामिल हैं वे स्थान जहां ऑब्जेक्ट संदर्भों को एक्सेस/इनवोक किया जाता है (डॉट . ऑपरेटर)। पहला है admin.birthList और दूसरा है birthList.add(list1) . यह पता लगाने के लिए आप पर निर्भर है कि क्या एक या दोनों एनपीई का कारण बनते हैं। यदि यह पहला आह्वान है, तो admin बस null है . यदि यह दूसरा आह्वान है, तो birthList बस null है . आप इसे एक पूर्ण योग्य वस्तु के साथ त्वरित करके इसे ठीक कर सकते हैं।

संपादित करें: यदि आपके पास मूल कारण निर्धारित करने में कठिन समय है (जैसा कि टिप्पणियों से पता चलता है), तो आपको डिबगिंग सीखने की आवश्यकता है। एक डीबगर चलाएं या System.out.println() की सहायता से "गरीब आदमी की डिबगिंग" करें उन्हें एक्सेस/आह्वान करने से पहले प्रत्येक चर का। पहले उस लाइन को देखें जहां एनपीई होता है। अगर यह उदाहरण के लिए है

admin.birthList.add(list1);

तो आपको मूल कारण को कम करने के लिए इसे निम्नानुसार बदलने की आवश्यकता है:

System.out.println("admin: " + admin);
List<Birth> birthList = admin.birthList;
System.out.println("birthList: " + birthList);
birthList.add(list1);

जांचें कि उनमें से कोई null प्रिंट करता है या नहीं . वैकल्पिक रूप से आप यह भी कर सकते हैं:

if (admin == null) throw new NullPointerException("admin is null!");
List<Birth> birthList = admin.birthList;
if (birthList == null) throw new NullPointerException("birthList is null!");
birthList.add(list1);

आप अलग-अलग पंक्तियों में अलग-अलग आमंत्रणों को भी अलग कर सकते हैं ताकि आपके पास यह जानने के लिए पर्याप्त पंक्ति संख्या हो कि कौन सा संदर्भ शून्य है।

List<Birth> birthList = admin.birthList; // If NPE line points here, then admin is null.
birthList.add(list1); // If NPE line points here, then birthList is null.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL [संग्रहीत प्रक्रिया] से [अस्थायी तालिका] में कैसे प्रवेश करें

  2. दूरी क्वेरी के भीतर मैसकल

  3. चेतावनी:mysql_connect():[2002] ऐसी कोई फ़ाइल या निर्देशिका नहीं है (यूनिक्स के माध्यम से कनेक्ट करने का प्रयास कर रहा है:///tmp/mysql.sock) में

  4. कैसे जांचें कि डेटाबेस में कोई टेबल या कॉलम मौजूद है या नहीं?

  5. समाप्ति की जाँच के लिए मूल तिथि तुलना