Erro: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

3 respostas
D

Galera, estou com um problema no meu programa. Estou a criar uma GUI para um programa que já havia criado e estou com o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException:
at Dados.SimulaGui.jButtonParaConvActionPerformed(SimulaGui.java:408)

Fui ver a linha 408:

sistema.pauseT();

De seguida abri o ficheiro sistema:

public class Sistema extends Thread {
public Autocarro autocarro;
public volatile boolean fim = false;
public JTextArea area;
public final Object autocarrox = new Object();
public boolean pauseThreadFlag = false;
 

public Sistema(JTextArea area) {
    super();
    this.area=area;
}

public Sistema(Autocarro autocarro)
{
    this.autocarro = autocarro;
}

//
public void run()
{
    while (!fim)
    {
        try 
        {
            sleep(Viagem.Espera * 1000);
            autocarro.andar();    
        }
        catch (InterruptedException ex)
        {
            ex.printStackTrace();
            return;
        }
       
    }            
}

//para terminar a thread.
public void fim()
{
    fim = true;
}


public void checkForPaused() {
    synchronized (autocarro) {
        while (fim) {
            try {
                autocarro.wait();
            } catch (Exception e) {}
        }
    }
}

public void pauseT() throws InterruptedException {
    fim = true;
}

public void resumeT() {
    synchronized(autocarro) {
        fim = false;
        autocarro.notify();
    }
}

Aparentemente é um erro no pauseT mas não tou a perceber o porquê. Alguém consegue ajudar?

3 Respostas

staroski

Não, o erro é no SimulaGui, na linha 408, como você já havia percebido.

Pergunta: Quando que acontece um NullPointerException?
Resposta: Quando você tenta acessar membros de um objeto que não foi inicializado.

Ou seja, você está tentando chamar o método pauseT() do objeto sistema, mas sistema não foi inicializado (sistema está null).

D

Certo, compreendi!
Como posso então inicializar a classe sistema?

staroski

Você não vai inicializar a classe, você precisa instanciar a classe, ou seja, criar um objeto da classe Sistema.
Sua classe Sistema tem dois construtores, com parâmetros diferentes, não sei qual deles você vai invocar.

Criado 14 de maio de 2018
Ultima resposta 17 de mai. de 2018
Respostas 3
Participantes 2