[英]Why am I getting a null pointer exception
今天是我學習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為null(即使我實例化了它?)。
我問這個問題有點傻,但是如何使控制台“不為空”。 我以為我通過使用Console console = System.console()來完成。
我對工作流程的期望是使用Netbeans編寫簡單的用戶輸入。 點擊調試按鈕。 看到一個屏幕彈出。 輸入一些文字。 查看輸出。
編輯2
好
經過一番挖掘后發現,您不能在netbeans中使用system.console。 我不明白為什么。 我只是使用用戶掃描儀。
現在我不確定接受o-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();
在終端(Linux中的Shell或Windows中的cmd)中運行此命令。
就我而言,我將您的代碼放在文件(Test.java)中。 生成后,IDE(以我的情況為例)創建一個bin文件(Test.class)
因此,只需轉到此文件夾並調用:
$ java Test
Enter input: asdasd
Two items: [asdasd, an entry]
和工程!
您沒有檢查任何結果值。 因此,如果其中一個調用返回“ 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。 因此,最好在使用這兩種情況之前檢查返回的值。
(通常,如果函數指定了可能的結果,則應這樣做)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.