簡體   English   中英

為什么會出現空指針異常

[英]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”,並且您隨后嘗試將其用作對象的引用/指針,則這就是Nul​​lPointerException的來源。

可能的罪魁禍首是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM