2011-10-29 213 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