2011-10-29 26 views
1

私はjavaに新しいので、明らかに何かが欠けている可能性があります。私はjavaで簡単なコマンドラインゲームを作成しようとしています。第二は、数学の問題ゲームを実行し、最初は、ユーザ入力を処理jarファイルを実行できません。

http://pastebin.com/wRgqgJQP

http://pastebin.com/0rXbxdiJ

:私は2つのクラスを使用します。

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) 

任意のアイデアをどのようにこの問題を解決するために、次のコンソールプリントが出て起動できない、と - 私は(日食のファイルは正常に動作します)jarファイルを実行しようとすると 、私はエラーを取得しますか?私は問題がsysoutの印刷物を使用することに関連していると思っています...しかし、私は確信していません。ありがとう!

答えて

2

を助けるべきですは、.または[0]のような配列参照のいずれかと一緒に使用すると、変数がnullであったことを示します。

スタックトレースは、 "game.GameHelper.getUserInput(GameHelper.java:12) "で発生したことを示しています。ソースリストには、GameHelperの12行目にこの行があります。

if (inputLine.length() == 0) 

一つだけ.inputLinenullだったことを告げがあります。どうしてこうなりました?それは11行目に割り当てられました。

inputLine = is.readLine(); 

So. readLine()がnullを返しました。どうしてこうなりました?まあ、http://download.oracle.com/javase/1.4.2/docs/api/java/io/BufferedReader.html#readLine()

戻り値から: 任意の行の終端文字は含めない行の内容を含む文字列、またはnullストリームの終わりには、

を 達した場合

ストリームの終わりに達しました。ストリームはSystem.inから構築されています。その理由を伝えるためには追加情報が必要です。

+1

ok、ありがとう、ありがとう!だから私が正しく理解するならば、問題は、入力が与えられる前に、行がすでに読み込まれているとプログラムが判断したということですか?ユーザーがテキストを入力できるようにするにはどうすればよいですか? – 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(); 
    } 


} 

を試してみては、この

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

のようなのtry/catchで

numProbs=(Integer.parseInt(numProbsReader)) 

をして囲み、それは

+0

ありがとうございました!私はそれをし、エラーは今:スレッド "メイン"例外java.lang.NumberFormatException:null at java.lang.Integer.parseInt(Integer.java:417)at java.lang.Integer.parseInt(Integer。 java:499) at game.MultGame.createGame(MultGame.java:19)\t \t at game.MultGame.main(MultGame.java:12) – Madeline

+0

新しいエラーに役立つ情報を追加しました – blazingkin

1

いずれかのnullpointerexceptionをデバッグする方法

1)行に移動します。 2)その行の各メソッド呼び出しを見てください。オブジェクトがヌルのオブジェクトで呼び出されたメソッドは可能でしょうか?あなたの特定のケースで

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

will result in a null pointer exception. 

、ラインの "if(inputLine.length()== 0)が" nullポインタ例外をスローしています。したがって、 "inputLine"がnullでないことを確認する必要があります。

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(); 
    } 
} 

そして、あなたが今までそれがやりたいすべてはあなたが

int inputNumber = scan.nextInt() 

、明らかに文字列から戻り値の型を変更するに

String inputLine = scan.nextLine() 

を変えることができる、のparseIntに結果を使用している場合int

+1

私は今まで聞いたことがないので...ハハ。私はそれを試してみましょう。ありがとう! – Madeline

関連する問題