2010-09-18 203 views
0

今天是我第一天学习java :)为什么我得到一个空指针异常

我有问题运行一个非常简单的例子(不是一个好的开始)。

这只是一个简单的例子,要求用户输入并将其打印出来,但当我尝试从控制台读取一行时,出现空指针异常。

我不明白,因为一切似乎都被实例化。

public static void main(String[] args) { 
     // TODO code application logic here 

     Console console = System.console(); 
     String userinput; 
     userinput= console.readLine("Enter input: "); 
     /* Creates list for planets */ 
     ArrayList outputlist= new ArrayList(); 
     outputlist.add(userinput); // Adds users input to the list 
     outputlist.add("an entry"); // Adds a string to the list 
     System.out.println("\nTwo items: " + outputlist); 
    } 

编辑1

由于一些人所指出的,当我尝试从控制台读取一行,因为控制台为空(即使我实例它引发错误? )。

我觉得有点傻,问这个问题,但我怎么能让控制台“不为空”。我以为我在使用Console console = System.console()时所做的。

我期望的工作流程是使用netbeans编写简单的用户输入。 点击调试按钮。 看到一个弹出的屏幕。 输入一些文字。 查看输出。

EDIT 2

O.K

小挖周围的事实证明,你不能的NetBeans中使用system.console后。 我不明白为什么。 我只是用户扫描仪。

现在我不知道该接受什么样的答案邻0

+1

你可以在这里发布例外吗? – casablanca 2010-09-18 16:14:58

+7

'如果不在终端中运行代码,System.console()'可以返回null。你在IDE中运行这个代码吗? – McDowell 2010-09-18 16:15:04

+0

@McD:这是唯一可能的原因。您应该将其作为回答:) – BalusC 2010-09-18 16:16:50

回答

2

它必须是System.console()。您不会对可能导致空指针异常的对象执行任何其他操作。而作为@McDowell指出,System.console()可以返回空值

2
Console console = System.console(); 
String userinput; 
userinput= console.readLine("Enter input: "); 

,而不是这个使用下面的代码;我认为System.console用于.Net平台

String userinput; 
InputStreamReader sr =new InputStreamReader(System.in); 
BufferReader br=new BufferReader(sr); 
userinput=br.readLine(); 
+1

java确实有System.console()自1.6以来 - 检查java.lang.System的当前文档。 – foo 2010-09-18 16:32:05

0

您不检查任何结果值。因此,如果其中一个调用返回“null”,并且您尝试随后将其用作对象的引用/指针,那么这就是您的NullPointerException来自哪里。

可能的罪魁祸首是System.console()和console.readLine()。

http://download.oracle.com/javase/6/docs/api/java/io/Console.html#readLine%28%29说readLine可能会返回null。 http://download.oracle.com/javase/6/docs/api/java/lang/System.html#console%28%29也表示此调用可能会返回null。 所以最好在使用它们之前检查两种情况下返回的值。 (一般情况下,如果函数指定了这样的可能结果,那么应该这样做)。

+0

为true,但如果readLine返回null,则它将简单地将null添加到arraylist,而不会抛出空指针异常。 – Codemwnci 2010-09-18 16:54:57

+0

你说得对 - ArrayList是那些只存储null值的集合之一。其他人会抛出一个例外。无论如何,你应该检查它,因为如果你得到一个“null”结果,那么你以后就不能使用字符串操作,所以即使你在存储null时没有得到Exception,你也会在尝试时得到它使用这些数据。而异常来自其原因,更难理解发生了什么。在那里更好地检查它。 – foo 2010-09-20 08:43:36

1

在终端(Linux中的shell或Windows中的cmd)中运行此操作。

在我的情况下,我把你的代码放在一个文件(Test.java)中。 构建,IDE(Eclipse中,在我的情况)后,会创建一个bin文件(的Test.class)

所以,只要进入这个文件夹,并呼吁:

$ java Test 
Enter input: asdasd 

Two items: [asdasd, an entry] 

和作品!

相关问题