Banco de dados e Threads

5 respostas
F

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

5 Respostas

R_chieck

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

al.barbosa

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.

ErickRAR

Você não instanciou funcionarioDAO e votoDAO;

F

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

ErickRAR

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

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;  
  
            }  
  
        }  
    }
Criado 18 de junho de 2012
Ultima resposta 18 de jun. de 2012
Respostas 5
Participantes 4