Не удается запустить файл JAR? - PullRequest
1 голос
/ 29 октября 2011

Я новичок в Java, поэтому я могу упустить что-то очевидное.Я пытаюсь создать простую игру командной строки в Java.Я использую два класса:

http://pastebin.com/wRgqgJQP

http://pastebin.com/0rXbxdiJ

Первый обрабатывает пользовательские вводы, второй запускает игру с математическими вопросами.Когда я пытаюсь запустить файл 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 print ... но я не уверен.Спасибо!

Ответы [ 4 ]

2 голосов
/ 29 октября 2011

A NullPointerException указывает, что переменная была нулевой при использовании либо с ., либо со ссылкой на массив, например [0].

Трассировка стека говорит нам, что это произошло "в игре. GameHelper.getUserInput (GameHelper.java:12) Msgstr "". У вашего списка источников есть эта строка в строке 12 в GameHelper.

if (inputLine.length() == 0)

Есть только один ., который говорит нам, что inputLine был null. Как это случилось? Ну, это было назначено в строке 11.

inputLine = is.readLine();

Итак. readLine() вернул ноль. Как это случилось? Ну с http://download.oracle.com/javase/1.4.2/docs/api/java/io/BufferedReader.html#readLine()

Возвращает: Строка, содержащая содержимое строки, не включая любые символы окончания строки или ноль, если конец потока имеет достигнуто

Итак, конец потока достигнут. Поток был создан из System.in, поэтому необходима дополнительная информация, чтобы объяснить, почему это может быть.

1 голос
/ 29 октября 2011

Есть какая-то конкретная причина, по которой вы не используете класс 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()

и, очевидно, измените тип возвращаемого значения с String на int

1 голос
/ 29 октября 2011

Способ отладки ЛЮБОГО nullpointerexception

1) Перейти к строке.2) Посмотрите на каждый вызов метода в этой строке - возможно ли, что метод вызван на объекте, где объект нулевой?

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

will result in a null pointer exception.  

В вашем конкретном случае строка "if (inputLine.length () == 0)" вызывает исключение нулевого указателя.Таким образом, вы должны убедиться, что «inputLine» не является нулевым ....

0 голосов
/ 29 октября 2011

Попробуйте это

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

и это должно помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...