Banco de dados e Threads

Seguinte pessoal esse é meu 1º post com esse usuário mas tinha uma outra conta da empresa que trabalhava mas ai vai a minha dúvda.

Não estou conseguindo realizar a ação do banco no código abaixo.


package CONFIG;

import DAO.funcionarioDAO;
import DAO.votoDAO;
import VO.InternoConfig;
import VO.abortaView;
import VO.controleView;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 * Hello world!
 *
 */
public class AgendaHoraI implements Runnable {

    Date time;
    Date time1;
    Boolean teste = true;
    funcionarioDAO funcDAO;
    votoDAO votoDAO;
    abortaView canc = new abortaView();
    controleView control = new controleView();

    public AgendaHoraI() {

        control.dispose();

    }

    @Override
    public void run() {

        while (teste) {
            System.out.println("VOTANDO");
            if (InternoConfig.getInstance().getStatus().equals("Recebido")) {
                canc.dispose();
                JOptionPane.showMessageDialog(null, "O funcionário "
                        + InternoConfig.getInstance().getNome() + " Votou com"
                        + " Sucesso");
                InternoConfig.getInstance().readFile();
                int c = Integer.parseInt(InternoConfig.getInstance().getVotante());
            
                
                
                try {
                    Thread.sleep(5000);
                    funcDAO.alterarStatus(c,"VOTOU");
                votoDAO.alterar(InternoConfig.getInstance().getNome(),
                        Integer.parseInt(InternoConfig.getInstance().getIdEleicao()));
                    InternoConfig.getInstance().readFile();
                } catch (InterruptedException ex) {
                    ex.printStackTrace(System.err); //imprime a stack trace (o erro)  
                }
                teste = false;

            } else if (InternoConfig.getInstance().getStatus().equals("Enviado")) {
                try {
                    Thread.sleep(1000);
                    InternoConfig.getInstance().readFile();

                    if (canc.isVisible()) {
                    } else {
                        canc.setVisible(true);
                    }
                } catch (InterruptedException ex) {
                    Logger.getLogger(AgendaHoraI.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else if (InternoConfig.getInstance().getStatus().equals("Fim")) {
                teste = false;

            }

        }
    }
}

O erro é esse abaixo

Exception in thread "Thread-2" java.lang.NullPointerException at CONFIG.AgendaHoraI.run(AgendaHoraI.java:55) at java.lang.Thread.run(Thread.java:722)

Lhes asseguro que o problema não é no SQL que as classes persistem mas sim pelo fato de estar dentro de uma Thread gostaria de saber
o que poderia ser.

Muito obrigado

Ola,
NullPointerException
verifique suas declarações, deve estar chamando um objeto que não está instanciado.

Não entendi direito o seu código. Parece que InternoConfig é um singleton.
Parece que a sua thread fica checando o status de alguma coisa. Se o status for “Enviado” ela chama o readFile da instância do singleton. Não sei se canc é uma janela.

Pode ser um problema de sincronização. Talvez outro código rodando simultaneamente esteja colocando algum objeto compartilhado como nulo. Cuidado com códigos que manipulam o mesmo objeto ao mesmo tempo. Se não puderem ser executados ao mesmo tempo, use synchronized.

Você não instanciou funcionarioDAO e votoDAO;

[quote=fabriRiboldi]Seguinte pessoal esse é meu 1º post com esse usuário mas tinha uma outra conta da empresa que trabalhava mas ai vai a minha dúvda.

Não estou conseguindo realizar a ação do banco no código abaixo.


package CONFIG;

import DAO.funcionarioDAO;
import DAO.votoDAO;
import VO.InternoConfig;
import VO.abortaView;
import VO.controleView;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 * Hello world!
 *
 */
public class AgendaHoraI implements Runnable {

    Date time;
    Date time1;
    Boolean teste = true;
    funcionarioDAO funcDAO;
    votoDAO votoDAO;
    abortaView canc = new abortaView();
    controleView control = new controleView();

    public AgendaHoraI() {

        control.dispose();

    }

    @Override
    public void run() {

        while (teste) {
            System.out.println("VOTANDO");
            if (InternoConfig.getInstance().getStatus().equals("Recebido")) {
                canc.dispose();
                JOptionPane.showMessageDialog(null, "O funcionário "
                        + InternoConfig.getInstance().getNome() + " Votou com"
                        + " Sucesso");
                InternoConfig.getInstance().readFile();
                int c = Integer.parseInt(InternoConfig.getInstance().getVotante());
            
                
                
                try {
                    Thread.sleep(5000);
                    funcDAO.alterarStatus(c,"VOTOU");
                votoDAO.alterar(InternoConfig.getInstance().getNome(),
                        Integer.parseInt(InternoConfig.getInstance().getIdEleicao()));
                    InternoConfig.getInstance().readFile();
                } catch (InterruptedException ex) {
                    ex.printStackTrace(System.err); //imprime a stack trace (o erro)  
                }
                teste = false;

            } else if (InternoConfig.getInstance().getStatus().equals("Enviado")) {
                try {
                    Thread.sleep(1000);
                    InternoConfig.getInstance().readFile();

                    if (canc.isVisible()) {
                    } else {
                        canc.setVisible(true);
                    }
                } catch (InterruptedException ex) {
                    Logger.getLogger(AgendaHoraI.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else if (InternoConfig.getInstance().getStatus().equals("Fim")) {
                teste = false;

            }

        }
    }
}

O erro é esse abaixo

Exception in thread "Thread-2" java.lang.NullPointerException at CONFIG.AgendaHoraI.run(AgendaHoraI.java:55) at java.lang.Thread.run(Thread.java:722)

Lhes asseguro que o problema não é no SQL que as classes persistem mas sim pelo fato de estar dentro de uma Thread gostaria de saber
o que poderia ser.

Muito obrigado[/quote]

Dentro do seu run(), você está utilizando funcionarioDAO e votoDAO. Para utilizala-los, eles devem ser instanciados primeiro.

[code] public void run() {
funcionarioDAO = new FuncionarioDAO(); // primeiro deve instanciar os objetos
votoDAO = new VotoDAO();
while (teste) {
System.out.println(“VOTANDO”);
if (InternoConfig.getInstance().getStatus().equals(“Recebido”)) {
canc.dispose();
JOptionPane.showMessageDialog(null, “O funcionário "
+ InternoConfig.getInstance().getNome() + " Votou com”
+ " Sucesso");
InternoConfig.getInstance().readFile();
int c = Integer.parseInt(InternoConfig.getInstance().getVotante());

            try {  
                Thread.sleep(5000);  
                funcDAO.alterarStatus(c,"VOTOU");   //Agora não terá problema de null com eles.
            votoDAO.alterar(InternoConfig.getInstance().getNome(),  
                    Integer.parseInt(InternoConfig.getInstance().getIdEleicao()));  
                InternoConfig.getInstance().readFile();  
            } catch (InterruptedException ex) {  
                ex.printStackTrace(System.err); //imprime a stack trace (o erro)    
            }  
            teste = false;  

        } else if (InternoConfig.getInstance().getStatus().equals("Enviado")) {  
            try {  
                Thread.sleep(1000);  
                InternoConfig.getInstance().readFile();  

                if (canc.isVisible()) {  
                } else {  
                    canc.setVisible(true);  
                }  
            } catch (InterruptedException ex) {  
                Logger.getLogger(AgendaHoraI.class.getName()).log(Level.SEVERE, null, ex);  
            }  
        } else if (InternoConfig.getInstance().getStatus().equals("Fim")) {  
            teste = false;  

        }  

    }  
}  

[/code]