JavaHashMap NullPointer вне NetBeans - PullRequest
2 голосов
/ 10 августа 2011

У меня есть следующий код в netbeans (используя javafx в том же проекте):

public class ExperimentControler {
    public static HashMap<String,Double> userInput = null;
    public static ObservableMapWrapper<String,Double> userInputObservable = null;   
}

и

static final String totalDistance = "Total distance";
public static void main(String[] args) {
    ExperimentControler.userInput = new HashMap<String,Double>();
    ExperimentControler.userInput.put(totalDistance, 300.0);
    ExperimentControler.userInputObservable = new ObservableMapWrapper<String,Double>(ExperimentControler.userInput);

    Application.launch(PhysicsGui.class, args);
}

@Override
public void start(Stage primaryStage) {
    ExperimentControler.userInput.get(totalDistance);
    //...
}

Это прекрасно работает внутри netbeans.
Если я «очищу и соберу» проект, полученный .jar-файл выдаст исключение нулевого указателя в этой строке:

ExperimentControler.userInput.get(totalDistance);

Кроме того, это моя Java-версия вне NetBeans:

>java -version
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)

Я тоже пробовал с jre 1.7.0, но результаты были точно такими же.
В netbeans у меня jdk 1.6.0_26.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

ОК ... благодаря комментарию Кала:

Как у вас работает эта программа? Вы пытались положить System.out.printlns () в вашем основном методе, чтобы убедиться, что они вызывается до сбоя приложения с NPE?

Я понял, что следующий (javafx) код (должен быть этот .. другой точки входа нет):

@Override
public void start(Stage primaryStage) {

обходит main (), когда я запускаю его как автономный. Может быть, коренная причина совершенно другая, я не знаю ..
Дело в том, что в netbeans main () работает, а в автономном - нет ..
Я также проверил манифест кувшина и основной класс правильный. (на всякий случай)

Я не мог понять, что main вообще не работает!
Итак, я переместил код, который был в main (), в переопределенный метод start, и он работает.

В спецификации сказано, что метод start () является основной точкой входа для приложений javafx. Но, в моем понимании, main () все еще должен вызываться перед start () .. это может быть ошибкой в ​​javafx.

0 голосов
/ 10 августа 2011

У меня было что-то подобное раньше.

Здесь может быть проблема с автобоксом Hashmap. Я думаю, что вы пытаетесь автоматически установить нулевое значение.

Попробуйте

ExperimentControler.userInput.put(totalDistance, new Double(300.0));

\ EDIT ОК благодаря @ hovercraft, если это не сработает, вы должны сохранить null в вашей хэш-карте где-то еще в вашем коде. Помните, что get(totalDistance) заменяется на get(totalDistance).doubleValue();, если вы назначаете на удвоение.

Что касается того, почему это не работает из банки ... понятия не имею, извините.

PS Какова точная строка для ExperimentControler.userInput.get(totalDistance);? Вы назначаете его на Double или double? это может иметь все значение.

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