Поток выбрасывает нулевой указатель после x раз

Изменить: Это не так просто, как бросать nullpointerexception. Поток работает несколько раз, прежде чем выдать nullpointerexception, что означает, что он внезапно решает прекратить работу, и я не могу понять, почему

Здравствуйте, у меня есть следующая тема

private class IsCreditAdded implements Runnable{
    ActionEvent evt;

    public IsCreditAdded(ActionEvent evt){
        this.evt = evt;
    }

    @Override
    public void run(){
        while (AddMinutes.creditChosen != true){
        }
        creditAdded(evt, AddMinutes.getEvt()); 
    }
}

Он ожидает изменения логического значения из класса GUI с параметрами выбора значения, а затем при изменении логического значения выполняет метод creditAdded со значениями evt(переданный из конструктора) и статический getMethod, содержащий ActionEvent, который был выбранный

public void creditAdded(ActionEvent evt, ActionEvent duration){
    System.out.println(evt.getActionCommand() + " " + duration.getActionCommand());
    switch (evt.getActionCommand()){
        case ("voipCredit"):
            switch (duration.getActionCommand()){
                case ("cancel"):
                    System.out.println("CANCEL");
                    disableButtons(evt, duration);
                    break;
            }
    addMinutes.dispose();
    AddMinutes.reset();
    sessionStorage.printTransActions();
}

Вот где создается нить:

private void creditButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             

    switch (evt.getActionCommand()){
        case ("voipCredit"):
            addMinutes = new AddMinutes();
            addMinutes.setService("VOIP");
            addMinutes.setVisible(true);
            addMinutes.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
            addMinutes.setPrices(nf.format(SessionPrices.getVOIP_10_MINS()), nf.format(SessionPrices.getVOIP_30_MINS()), 
                    nf.format(SessionPrices.getVOIP_1_HOUR()), nf.format(SessionPrices.getVOIP_ALL_DAY()));
            threadVar = new Thread(new IsCreditAdded(evt));
            threadVar.start();  
            disableAllButtons();
            break;
    }
}

Теперь проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я выбираю кнопку, которая дает команду getActionCommand "отменить", она работает два раза, иногда три, но затем, если я пытаюсь сделать это снова, я получаю нулевое исключение. Фактическое сообщение об ошибке, которое я получаю:

Исключение в потоке "Thread-6" java.lang.NullPointerException на com.aidanmoore.InternetCafeGUI.creditAdded(InternetCafeGUI.java:416) на com.aidanmoore.InternetCafeGUI$IsCreditAdded.run(InternetCafeG4) at.javaj at.Thread.run(Thread.java:745)"ОСТАНОВЛЕНА СТРОКОМ (общее время: 9 секунд)"

Я не могу понять, почему оно выдает это исключение после нескольких часов поиска похожих проблем, с которыми сталкивались другие, и, поскольку поток работает x раз, прежде чем выдать исключение, я не могу понять, почему оно внезапно выходит из строя.

0 ответов

Другие вопросы по тегам