2011-12-06 20 views
26

मैं अपनी एंड्रॉइड समस्या या जावा समस्या को स्वयं उलझन में डाल रहा हूं।जावा: अपवाद स्वयं शून्य है

जब मैं जो ब्लूटूथ के साथ काम करता एक Android आवेदन डिबगिंग किया गया था, प्रवाह IOException का एक कैच ब्लॉक जिसमें मैं बाद में उस अपवाद ई पता चला अशक्त था .... यह फेंक दिया गया था जब मैं एक से पढ़ने के लिए कोशिश कर रहा था पर बंद कर दिया इनपुटस्ट्रीम

हां यह NullPointerException नहीं था, लेकिन अन्य प्रकार का अपवाद जो शून्य है- बेहतर कहने वाला गैर-प्रारंभिक कहलाता है।

क्या यह संभव है? किस परिदृश्य में ऐसे प्रारंभिक अपवादों को फेंक दिया जा सकता है ??

An exception is null.... ITS NOT A NULL POINTER EXCEPTION

+6

'फेंक शून्य;'? – Dimme

+0

Pls। कोड नमूना फेंकने अपवाद जोड़ें। – Azodious

+0

यह सिर्फ पहले से जुड़े डिवाइस के साथ एक ब्लूटूथइनपुटस्ट्रीम.read() कॉल है ... लेकिन अगर कोई दिलचस्पी लेता है तो मैं एक स्नैपशॉट को सबूत के रूप में डालने की कोशिश कर रहा हूं ...... – Prasham

उत्तर

-2

जावा में, आप null फेंक कर एक NullPointerException फेंक कर सकते हैं। इस मामले में, फेंकने योग्य अंततः NullPointerException होगा।

public static void main(String[] args) 
    { 
     try{ 
      a(null); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e); 
      e.printStackTrace(); 
     } 
    } 
    public static void a(String[] args) 
    { 
     throw null; 
    } 

आउटपुट:

java.lang.NullPointerException 
java.lang.NullPointerException 
at scjp.Scjp.a(Scjp.java:18)  
at scjp.Scjp.main(Scjp.java:8) 
+1

मैंने पोस्ट किया गया स्क्रीनशॉट देखें ..... मुझे लगता है कि अब आपको इसे देखने के बाद जवाब बदलना है ..... :) – Prasham

+0

वह जो त्रुटि मिली वह nullpointerexception नहीं है, लेकिन अपवाद स्वयं शून्य है –

0

आप शायद अपने डिबगर द्वारा मूर्ख जा रहा है।

उस पंक्ति के तहत कोड की एक और पंक्ति जोड़ें (if(false) log.v("",""); जैसी कुछ अनुपयोगी), वहां तोड़ें और वहां से अपने अपवाद का मूल्य देखें।

Log.e(TAG, "my null exception", e); भी प्रयास करें और लॉग पढ़ें।

+0

वही, असुरक्षित – Prasham

+0

लॉग को उस फेंकने योग्य के बारे में कुछ प्रिंट करना चाहिए, लेकिन संभवतः फेंकने वाला शून्य है .... यह "मेरा शून्य अपवाद" से अधिक कुछ नहीं प्रिंट करता है – Prasham

+0

"आपके डीबगर द्वारा बेवकूफ़ बनना" अनिवार्य रूप से गलतफहमी के लिए सीमित नहीं है - डीबगर संभावित रूप से प्रोग्राम प्रवाह को दूषित कर सकता है या राज्य और बस इसे गलत तरीके से रिपोर्ट नहीं करते हैं। –

-1

मुझे यकीन है कि अगर यह एक ही समस्या है नहीं कर रहा हूँ, लेकिन मैं पहले से ही एक समान प्रश्न ... उत्तर दिया है अगर यह होता है जब आप तो इस लिंक पर एक नज़र डालें एक InputStream से पढ़ने की कोशिश ...

Android Bluetooth connection issue

+0

कोई दोस्त नहीं !! यह वही समस्या नहीं है, असल में मैं इस मुद्दे से छुटकारा नहीं लेना चाहता हूं, इस मुद्दे के बारे में उत्सुक था, खासकर इसका कारण .... – Prasham

+1

आह ठीक है! तो अगर यह केवल यह समझने के लिए है कि अपवाद कैसे संभाला जाता है ... अपवाद के रूप में शून्य को फेंकना (अपवाद एक वस्तु है!) जावा में संभव है ... http://www.adarshr.com/papers/npe – Swordfish90

14

क्या यह संभव है? किस परिदृश्य में ऐसे प्रारंभिक अपवादों को फेंक दिया जा सकता है ??

यह एक अनुरूप जावा कंपाइलर और अनुरूप जावा वर्चुअल मशीन का उपयोग करना संभव नहीं है, और विस्तार से एक अनुरूप डेवलिक वर्चुअल मशीन का उपयोग करना संभव नहीं है। JLS e चर कि स्थान

या तो आप एक गाड़ी आभासी मशीन, एक गाड़ी डिबगर, या अपने आईडीई के साथ एक समस्या मिल गया है पर null होने के लिए, उपकरण और/या प्रक्रिया का निर्माण की अनुमति नहीं है।

यदि मैं आपकी स्थिति में था, तो मैं अब के लिए डीबगर का उपयोग करना बंद कर दूंगा, और पुराने कोड वाले ट्रेसप्रिंट को अपने कोड में जोड़ने पर वापस आऊंगा। और सुनिश्चित करें कि आप स्रोत से एक साफ और पूर्ण निर्माण करते हैं।


एक अन्य संभावना पर विचार कर सकते है कि लाइन नंबर कि JRE कार्यावधि में रिपोर्ट कर रहा है (और है कि डिबगर पर निर्भर होता है) स्रोत कोड में लाइन संख्या के साथ अस्तर नहीं हैं। ऐसा तब हो सकता है जब आपने अपने निर्माण और तैनाती प्रक्रियाओं में कोई गलती की हो। गलती कुछ ऐसी फाइल हो सकती है जो फ़ाइल को सहेजना भूल जाए, बिल्ड करना भूल जाए, ऐप के नए संस्करण को तैनात करना भूल जाए या फाइल सिस्टम के साथ अपना आईडीई सिंक हो।


Fwiw, सिद्धांत यह है कि इस throw null; के कारण होता है या कुछ बराबर पानी पकड़ नहीं करता है। JLS section 14.18 का कहना है:

"अभिव्यक्ति के मूल्यांकन सामान्य रूप से पूर्ण करता है, एक शून्य मान उत्पादन, तो वर्ग NullPointerException का एक उदाहरण वी 'बनाया है और बातिल के बजाय फेंक दिया है।"

यह समझना महत्वपूर्ण है अगर आप अपने संदर्भ में उस वाक्य पढ़ा आसान है, लेकिन यह स्पष्ट रूप से कह रही है कि throw null; वास्तव में एक NullPointerException फेंकता है। , Exception is NULL always

असल में, यह कह रही है कि नकल करते कोड एक अपवाद है कि ग्रहण के बारे में पता नहीं है फेंक है:


अद्यतन

मैं इस तो सवाल में एक और प्रशंसनीय विवरण पाया और ग्रहण एमुलेटर null को प्रतिस्थापित करने में "मददगार" है। यह एक एमुलेटर बग की तरह लगता है।

+0

IMHO एक मीठा जवाब है! – lucapette

संबंधित मुद्दे