为什么我得到一个空指针异常
今天是我第一天学习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
它必须是System.console()
。您不会对可能导致空指针异常的对象执行任何其他操作。而作为@McDowell指出,System.console()
可以返回空值
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();
java确实有System.console()自1.6以来 - 检查java.lang.System的当前文档。 – foo 2010-09-18 16:32:05
您不检查任何结果值。因此,如果其中一个调用返回“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。 所以最好在使用它们之前检查两种情况下返回的值。 (一般情况下,如果函数指定了这样的可能结果,那么应该这样做)。
在终端(Linux中的shell或Windows中的cmd)中运行此操作。
在我的情况下,我把你的代码放在一个文件(Test.java)中。 构建,IDE(Eclipse中,在我的情况)后,会创建一个bin文件(的Test.class)
所以,只要进入这个文件夹,并呼吁:
$ java Test
Enter input: asdasd
Two items: [asdasd, an entry]
和作品!
你可以在这里发布例外吗? – casablanca 2010-09-18 16:14:58
'如果不在终端中运行代码,System.console()'可以返回null。你在IDE中运行这个代码吗? – McDowell 2010-09-18 16:15:04
@McD:这是唯一可能的原因。您应该将其作为回答:) – BalusC 2010-09-18 16:16:50