我是java的新手,所以我可能会遗漏一些明显的东西。我正在尝试用java创建一个简单的命令行游戏。我使用两个类:
第一个处理用户输入,第二个运行数学问题游戏。 当我尝试运行jar文件(eclipse文件运行正常)时,我收到错误 - 无法启动,并且以下控制台打印出来:
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打印的东西有关......但我不确定。谢谢!
答案 0 :(得分:2)
NullPointerException
表示当变量与.
或[0]
之类的数组引用一起使用时,该变量为空。
堆栈跟踪告诉我们它发生在“game.GameHelper.getUserInput(GameHelper.java:12) “。你的源列表在GameHelper的第12行有这一行。
if (inputLine.length() == 0)
只有一个.
告诉我们inputLine
是null
。那是怎么发生的?嗯,它是在第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 :(得分:1)
调试任何nullpointerexception的方法
1)转到该行。 2)查看该行上的每个方法调用 - 是否有可能在对象为null的对象上调用该方法?
a=null ;
a.setX("X");
will result in a null pointer exception.
在您的特定情况下,行“if(inputLine.length()== 0)”抛出空指针异常。因此,您应该确保“inputLine”不为null ....
答案 2 :(得分:1)
您没有使用扫描仪课程的任何特殊原因?
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()
显然将返回类型从String更改为int
答案 3 :(得分: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");}
那应该有帮助