2009-12-16 11 views
5

यह:कंसोल के ReadLine में NullPointerException()

Console c = System.console(); 
     String readline; 
     String u = c.readLine("%s", "args"); 

फेंकता एक NullPointerException. फिर भी विधि के हस्ताक्षर है:

public String readLine(String fmt, Object... args) 

इस अपवाद क्यों फेंक दिया जा रहा है?

उत्तर

17
Console c = System.console(); 

c शून्य है?

Doc:

सार्वजनिक स्थिर कंसोल कंसोल()

अद्वितीय कंसोल वस्तु वर्तमान जावा आभासी मशीन के साथ जुड़े, यदि कोई हो देता है।

रिटर्न: सिस्टम कंसोल, यदि कोई है, अन्यथा शून्य।

+0

क्या यह एक कारखाना विधि नहीं है? – andandandand

+0

ओह ... मैं Netbeans से कंसोल ऑब्जेक्ट कैसे प्राप्त कर सकता हूं? – andandandand

+0

मैंने नेटबीन्स में इस कॉल का उपयोग करने की कोशिश नहीं की है, लेकिन आप इसे ग्रहण करने के लिए एक्लिप्स में रिमोट डीबगिंग का उपयोग कर सकते हैं: http://stackoverflow.com/questions/104254/java-io-console-support-in-eclipse-ide/105403 # 105403 मुझे यकीन है कि नेटबीन्स में ऐसा कुछ करना संभव है। – McDowell

4

NullPointerException एक रनटाइम अपवाद है, जिसका अर्थ है कि इसे विधि हस्ताक्षर में घोषित नहीं किया जाना है।

+1

यह सवाल का उत्तर है कि क्यों एनपीई फेंक दिया गया है, यह देखते हुए कि हस्ताक्षर कोई अपवाद निर्दिष्ट नहीं करता है। जैसा कि मैंने सवाल पढ़ा, यह प्रश्नकर्ता का भ्रम का मुख्य बिंदु प्रतीत होता है। –

2

c किसी भी तरह से शून्य है?

वैसे, आपका रीडलाइन स्टेटमेंट c.readLine("args") के समतुल्य है - क्या आप इसका इरादा रखते हैं?

1

कोड स्निपेट में कुछ अजीब बात है। आप "रीडलाइन" नामक एक चर घोषित करते हैं लेकिन आप इसे प्रारंभ नहीं करते हैं और इसका उपयोग नहीं करते हैं।

क्या यह संभव है कि प्रोग्राम में आप किसी भी तरह से इस चर का उपयोग करते हैं w/o इसे प्रारंभ करना? (एक लंबा शॉट, मुझे पता है)

+0

यह एक पाठ्यपुस्तक नमूना है। – andandandand

2

System.console() शून्य वापस लौटा, यह कोड कोड स्निपेट में एकमात्र पंक्ति है जो संभावित रूप से एक शून्य सूचक अपवाद को फेंक सकता है।

4

के माध्यम से: विस्तार

के लिए http://www.codeguru.com/forum/showthread.php?t=487190 एक विधि का उपयोग करने से पहले यह हमेशा क्या विधि करता है पर एपीआई दस्तावेजों को पढ़ने के लिए भुगतान करता है। विधि कंसोल() के लिए उदाहरण डॉक्स के लिए कहते हैं:

उद्धरण:

एक आभासी मशीन एक सांत्वना है या नहीं पर निर्भर है अंतर्निहित प्लेटफ़ॉर्म और भी तरीके पर है, जिसमें आभासी मशीन है ने आह्वान किया। आभासी मशीन मानक इनपुट और आउटपुट धाराओं पुनः निर्देशित तो इसकी सांत्वना उपलब्ध नहीं होगा बिना एक इंटरैक्टिव कमांड लाइन से शुरू कर दिया है और आम तौर कीबोर्ड और प्रदर्शन जहाँ से आभासी मशीन शुरू किया गया था से जोड़ा जा जाएगा। यदि वर्चुअल मशीन स्वचालित रूप से प्रारंभ हो जाती है, उदाहरण के लिए पृष्ठभूमि नौकरी शेड्यूलर द्वारा , तो यह आमतौर पर कंसोल नहीं होगा।

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

यदि आप जावा कमांड का उपयोग कर कमांड लाइन से प्रोग्राम का आह्वान करने का प्रयास करते हैं तो उसके पास एक कंसोल होगा और विधि को वापस नहीं करना चाहिए। उस विधि से शून्य वापस आ जाएगी।

वैकल्पिक रूप से, स्कैनर वर्ग का उपयोग कर अपने आईडीई के अंदर काम करेंगे:

Scanner sc = new Scanner(System.in);

0

क्योंकि System.console() आईडीई प्रयोग कर रहे हैं में null है। इसके बजाय java.util.Scanner आज़माएं:

import java.util.Scanner; 
Scanner s = new Scanner(System.in); 
String u = s.nextLine(); 
संबंधित मुद्दे