Java.lang.NullPointerException

4 respostas
jeovane.reges

Olá galera do GUJ boa noite.
Estou estudando o material da apostila disponivel no K19 sobre JPS2/JPA2.
No "trabalho" final é proposto desenvolver uma aplicação, no entanto, estou tendo problema de java.lang.NullPointerException

Já criei a tabela na braçalmente e a povoei pra ver se o erro deixava de existir mas, não mudou nada.
Bem o erro que dar é o seguinte abaixo

java.lang.NullPointerException
	at model.repositories.TimeRepository.getLista(TimeRepository.java:37)
	at managedbeans.TimeBean.getTimes(TimeBean.java:65)

Aqui está a minha classe TimeRepository

public class TimeRepository {
    private EntityManager manager;

    public TimeRepository(EntityManager manager) {
        this.manager = manager;
    }
    
    public void adiciona(Time time){
        this.manager.persist(time);
    }
    
    public Time procura(Long id){
        return this.manager.find(Time.class, id);
    }
    
    public Time atualiza(Time time){
        return this.manager.merge(time);
    }
    
    public List<Time> getLista(){
        Query query = this.manager.createQuery("select t from Time t");
        return query.getResultList();
    }
    
    public void remove(Long id){
        Time time = this.procura(id);
        Query query = this.manager.createQuery("select j from Jogador j");
        List<Jogador> jogadores = query.getResultList();
        
        for (Jogador jogador : jogadores) {
            jogador.setTime(null);
        }
        
        this.manager.remove(time);
    }
}

E aqui a TimeBean

@ManagedBean
public class TimeBean {
    private Time time = new Time();
    private List<Time> times;
    
    public void adiciona(){
        EntityManager manager = this.getManager();
        TimeRepository repository = new TimeRepository(manager);
        
        if(this.time.getId() == null){
            repository.adiciona(this.time);
        }else{
            repository.atualiza(this.time);
        }
        
        this.time = new Time();
        this.times = null;
    }
    
    public void preparaAlteracao(){
        Map<String, String> params = 
                FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        
        Long id = Long.parseLong(params.get("id"));
        EntityManager manager = this.getManager();
        TimeRepository repository = new TimeRepository(manager);
        this.time = repository.procura(id);
    }
    
    public void remove(){
        Map<String, String> params = 
                FacesContext.getCurrentInstance().getExternalContext().getInitParameterMap();
        Long id = Long.parseLong(params.get("id"));
        EntityManager manager = this.getManager();
        TimeRepository repository = new TimeRepository(manager);
        repository.remove(id);
        this.times = null;
    }
    
    public List<Time> getTimes(){
        if(this.times == null){
            EntityManager manager = this.getManager();
            TimeRepository repository = new TimeRepository(manager);
            this.times = repository.getLista();
        }
        return this.times;
    }
    
    private EntityManager getManager(){
        FacesContext fc = FacesContext.getCurrentInstance();
        ExternalContext ec = fc.getExternalContext();
        HttpServletRequest request = (HttpServletRequest) ec.getRequest();
        return (EntityManager) request.getAttribute("EntityManager");
    }

    public Time getTime() {
        return time;
    }

    public void setTime(Time time) {
        this.time = time;
    }
    
}

Alguém poderia me dar uma luz e dizer aonde que estou errando pra que fique dando java.lang.NullPointerException??
Desde de já obrigado pela ajuda de todos.
Abraço.

4 Respostas

luisgarcia173

Camaradinha.

Não bate cabeça em onde está errando ou o que fez de errado. Começa a partir do ponto de erro pra tentar identificar o que está acontecendo.

  1. Lendo a mensagem de erro:
  • TimeRepository (classe)
  • getLista (método)
  1. Indo no ponto de erro:

public List&lt;Time&gt; getLista(){ Query query = this.manager.createQuery("select t from Time t"); return query.getResultList(); }

  • O único atributo que depende que esteja preenchido para criar a Query é o “manager”. Segue o debug e vê se ele está sendo preenchido!
jeovane.reges

E como que faço para debugar e ver se ele estar sendo preenchido? Estou usando o netbeans 7

L

Tutorial e video-aula sobre o depurador do Netbeans:

http://www.virtualbroker.org/tutorial-de-depurador-do-netbeans.html

http://www.youtube.com/watch?v=Ztq87Y6UfdQ

ricardoal
eu uso asim espero ajudar classe para a data e metodo la no meu formulario
import java.text.SimpleDateFormat;  
import java.util.Date;  
public class Data {  
    String mes, dia, ano, dia_semana, hora;   
       SimpleDateFormat horaformatada = new SimpleDateFormat("hh:mm:ss");  
         
       public void le_hora() {  
           Date horaAtual = new Date();  
           hora = horaformatada.format(horaAtual);  
       }  
       public void le_data() {  
        Date data = new Date();  
        //mes = "" + data.getMonth();//esse metodo nao ta sendo mais utilizado mais vale a intesao   
        dia = "" + data.getDate();  
        ano = "" + (1900 + data.getYear());  
        //dia_semana = "" + data.getDay();  
        switch(data.getDay()){  
            case 0 : dia_semana = "Domigo Feira"; break;  
            case 1 : dia_semana = "Segunda Feira"; break;  
            case 2 : dia_semana = "Terça Feira"; break;  
            case 3 : dia_semana = "Quarta Feira"; break;  
            case 4 : dia_semana = "Quinta Feira"; break;  
            case 5 : dia_semana = "Sexta Feira"; break;  
            case 6 : dia_semana = "Sábado Feira"; break;      
        }  
        switch(data.getMonth()){  
            case 0 : mes = "1"; break;  
            case 1 : mes = "2"; break;  
            case 2 : mes = "3"; break;  
            case 3 : mes = "4"; break;  
            case 4 : mes = "5"; break;  
            case 5 : mes = "6"; break;  
            case 6 : mes = "7"; break;  
            case 7 : mes = "8"; break;  
            case 8 : mes = "9"; break;  
            case 9 : mes = "10"; break;  
            case 10 : mes = "11"; break;  
            case 11 : mes = "12"; break;  
        }  
    }              
}
metodo no formulario
public frmTelaPrincipal() {
        initComponents();
        //centralizar form na tela       
        setLocationRelativeTo(null);
        setResizable(false);
        //data e hora
        mostra_data = new Data();
        mostra_data.le_data();        
       

        timer1.start();//aki ativa o jar timer
         
        
    }
quando for salvar usar o
jTextFild.getDate();
Criado 18 de agosto de 2012
Ultima resposta 18 de ago. de 2012
Respostas 4
Participantes 4