2011-10-29 210 views
1

我是新來的java,所以我可能會錯過一些明顯的東西。我試圖用java創建一個簡單的命令行遊戲。我用了兩個類:無法運行jar文件?

http://pastebin.com/wRgqgJQP

http://pastebin.com/0rXbxdiJ

第一處理用戶輸入,第二運行一個數學問題的遊戲。 當我嘗試運行(在eclipse文件運行正常)的jar文件,我得到一個錯誤 - 無法啓動,下面控制檯打印出來:

Exception in thread "main" java.lang.NullPointerException 
at game.GameHelper.getUserInput(GameHelper.java:12) 
at game.MultGame.createGame(MultGame.java:18) 
at game.MultGame.main(MultGame.java:12) 

任何想法如何解決這一問題?我在想這個問題與使用sysout打印的東西有關......但我不確定。謝謝!

回答

2

一個NullPointerException表示當與.或像[0]這樣的數組引用一起使用時,變量爲空。

堆棧跟蹤告訴我們它發生了「在game.GameHelper.getUserInput(GameHelper.java:12) 」。你的源碼列表在GameHelper的第12行有這一行。

if (inputLine.length() == 0) 

只有一個.告訴我們,inputLinenull。那是怎麼發生的?那麼,它被分配在第11行。

inputLine = is.readLine(); 

所以。 readLine()返回null。那是怎麼發生的?那麼從http://download.oracle.com/javase/1.4.2/docs/api/java/io/BufferedReader.html#readLine()

返回:包含行的內容,不包括 任何行終止符或字符串NULL,如果流的末尾,已 達到

因此,流的結束已經達到。該流由System.in構建,因此需要附加信息來說明原因。

+1

好吧,有道理,謝謝!所以如果我理解正確的話,問題在於,在任何輸入被給出之前,程序已經決定了該行已被讀取?我該如何去允許用戶輸入文字? – Madeline

+0

不,您已達到輸入流的末尾。如果您在沒有附加控制檯窗口的情況下啓動,則可能會出現這種情況,因爲用戶無法輸入文本。您必須提供如何啓動程序的詳細信息。 –

0

試試這個

package game; 
import java.io.*; 
public class GameHelper { 

    public String getUserInput(String prompt) { 
     String inputLine = null; 
     System.out.print(prompt + " "); 
     try { 
      BufferedReader is = new BufferedReader(new InputStreamReader(
        System.in)); 
      inputLine = is.readLine(); 
      if (inputLine == null) 
       return null; 
     } catch (IOException e) { 
      System.out.println("IOException: " + e); 
     } 
     return inputLine.toLowerCase(); 
    } 


} 

要解決的其他錯誤環繞

numProbs=(Integer.parseInt(numProbsReader)) 

在try/catch語句讓喜歡本

try{ 
numProbs=(Integer.parseInt(numProbsReader)) 
}catch(Exception e){System.err.println("Invalid Input");} 

,並應該幫助

+0

謝謝!我做到了,現在的錯誤是:線程「main」中的異常java.lang.NumberFormatException:null java.lang.Integer.parseInt(Integer。java.lang.Integer.parseInt(Integer.java:417) java:499) at game.MultGame.createGame(MultGame.java:19)\t \t at game.MultGame.main(MultGame.java:12) – Madeline

+0

增加了一些更多的幫助你的新錯誤 – blazingkin

1

調試ANY nullpointerexception的方法

1)轉到該行。 2)看看這一行上的每個方法調用 - 可能的方法調用對象爲null的對象?

a=null ; 
a.setX("X"); 

will result in a null pointer exception. 

在特定情況下,行 「如果(inputLine.length()== 0)」 時拋出一個空指針異常。因此,你應該確保「inputLine」不爲空......

1

你沒有使用Scanner類的任何特殊原因?

package game; 
import java.util.Scanner; 
public class GameHelper { 
    public String getUserInput(String prompt) 
    { 
     System.out.print(prompt + " "); 
     Scanner scan = new Scanner(System.in); 
     String inputline = scan.nextLine(); 
     return inputLine.toLowerCase(); 
    } 
} 

如果所有你想要它做的是使用的結果parseInt函數,你可以改變

String inputLine = scan.nextLine() 

int inputNumber = scan.nextInt() 

,顯然從字符串更改返回類型int

+1

我猜...因爲直到現在我還沒有聽說過它?哈哈。我會試一試。謝謝! – Madeline