NullPointerException

9 respostas
brunoneiva

Fala pessoal! Estou intrigado aqui com esse NullPointerException que está sendo lançado na minha aplicação!

O lance é o seguinte... a minha aplicação acessa uma base de dados que contém dados de chuva. A tabela que ela consulta têm uma chave primária dupla (data da medição, id da estação). Na minha aplicação eu tenho uma classe que representa essa chave primária (TimeSerieDataPK) e a classe que representa minha serie de dados temporais (TimeSerieData). TimeSerieData contém um TreeMap onde armazena a chave primária e o valor da chuva naquele instante para uma estação específica.

O problema se dá quando o usuário deseja exportar os dados da base de dados. A aplicação simplesmente consulta o banco e coloca cada conteudo da tabela consultada como sendo um elemento do TimeSerieData, utilizando o método put(key,value).

Neste método put, é lançada uma NullPointerException. No seguinte método:

public double put(Date date, String gaugeCode, double value){
        //DEBUG
        System.out.println("date = "+date);
        System.out.println("gaugeCode = "+gaugeCode);
        System.out.println("value = "+value);
        TimeSerieDataPK key = new TimeSerieDataPK(date,gaugeCode);
        System.out.println("key = "+key);
        System.out.println("this.datas = "+this.datas);

        return this.datas.put(key, value); //Aqui é lançada a exceção
    }

Já verifiquei se existe algum objeto que seja null mas não. O objeto date chega com um valor correto, assim como gaugeCode e value. O objeto key é criado também, porém na linha this.datas.put(key, value) é lançada a referida exceção.

Segue as classes...

public class TimeSerieDataPK {
    private Date date;
    private String gaugeCode;

    public TimeSerieDataPK(Date date, String gaugeCode) {
        this.date = date;
        this.gaugeCode = gaugeCode;
    }

(...)

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof TimeSerieDataPK)
                if(((TimeSerieDataPK)obj).getDate().compareTo(this.getDate())==0)
                    if(((TimeSerieDataPK)obj).getGaugeCode().compareTo(this.getGaugeCode())==0)
                        return true;
        return false;
    }

    @Override
    public int hashCode() {
        return Integer.parseInt(this.getGaugeCode())*2/3;
    }
}

A classe que representa a minha série de dados temporal é a seguinte:

public class TimeSerieData {
    
    public static final int TIMESERIE_INSTANTANEOUS = 0;
    public static final int TIMESERIE_10_IN_10_MINUTES = 1;
    public static final int TIMESERIE_15_IN_15_MINUTES = 2;
    public static final int TIMESERIE_6_IN_6_HOURS = 3;
    public static final int TIMESERIE_HOURLY = 4;
    public static final int TIMESERIE_DAYLY = 5;
    public static final int TIMESERIE_MONTHLY = 6;
    public static final int TIMESERIE_YEARLY = 7;

    private TreeMap<TimeSerieDataPK, Double> datas;
    private int typeOfTimeSerieData;
    
    public TimeSerieData(int typeOfTimeSerieData) {
        this.datas = new TreeMap<TimeSerieDataPK, Double>();
        this.typeOfTimeSerieData = typeOfTimeSerieData;        
    }

    public void put(TimeSerieDataPK key, double sum) {
        this.datas.put(key, sum);
    }
    
    public double put(Date date, String gaugeCode, double value){
        //DEBUG
        System.out.println("date = "+date);
        System.out.println("gaugeCode = "+gaugeCode);
        System.out.println("value = "+value);
        TimeSerieDataPK key = new TimeSerieDataPK(date,gaugeCode);
        System.out.println("key = "+key);
        System.out.println("this.datas = "+this.datas);

        return this.datas.put(key, value);
    }

(...)
}
Console:
[LOG] - [beer.gui.GUI_PanelExportDischarge] Todos os componentes de interface gráfica foram inicializados
date = Thu Nov 30 14:40:00 BRST 2006
gaugeCode = 8
value = 0.1
key = beer.beans.TimeSerieDataPK@5
this.datas = {}
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at beer.beans.TimeSerieData.put(TimeSerieData.java:58)
        at beer.io.dao.GenericMethodsBDDAO.getMinuteData(GenericMethodsBDDAO.java:242)
        at beer.io.dao.DischargeGaugeBDDAO.getMinuteData(DischargeGaugeBDDAO.java:181)
        at beer.manipulators.DischargeManipulator.getHourlyData(DischargeManipulator.java:101)
        at beer.BEERFacade.getHourlyPrecOfDischargeTable(BEERFacade.java:815)
        at beer.gui.GUI_PanelExportDischarge.btnVisualizeActionPerformed(GUI_PanelExportDischarge.java:513)
        at beer.gui.GUI_PanelExportDischarge.access$300(GUI_PanelExportDischarge.java:28)
        at beer.gui.GUI_PanelExportDischarge$5.actionPerformed(GUI_PanelExportDischarge.java:166)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:5517)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
        at java.awt.Component.processEvent(Component.java:5282)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3984)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3819)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1791)
        at java.awt.Component.dispatchEvent(Component.java:3819)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.r
Aguardo =D

9 Respostas

fiaux

Tem certeza que datas foi inicializado, que não está nulo? Se foi naquela linha, pra mim só pode ser isso.

brunoneiva

Não, não… dá uma sacada no console! Tá imprimindo a data =D

fiaux

Ok, mas já rodou em debug?

brunoneiva

Já sim! E tá tudo beleza! O que vou fazer agora é testar a classe, usando JUnit… vou aprender agora =D

Sugeres alguma coisa?

Abraços!

fiaux

Cara, o que tem na linha 58 da classe TimeSerieData.java?

brunoneiva

Em outra lista de discussão, um colega escreveu isto:

Pois bem, não entendi como resolver…

De qualquer forma, fiz isso:

TimeSerieDataPK key = new TimeSerieDataPK(date,gaugeCode); this.datas.put(key, value); return this.datas.get(key);

Quando fiz isso deu uma ClassCastException…

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: beer.beans.TimeSerieDataPK at java.util.TreeMap.compare(TreeMap.java:1093) at java.util.TreeMap.getEntry(TreeMap.java:347) at java.util.TreeMap.get(TreeMap.java:265) at beer.beans.TimeSerieData.put(TimeSerieData.java:54) at beer.io.dao.GenericMethodsBDDAO.getMinuteData(GenericMethodsBDDAO.java:242) at beer.io.dao.DischargeGaugeBDDAO.getMinuteData(DischargeGaugeBDDAO.java:181) at beer.manipulators.DischargeManipulator.getHourlyData(DischargeManipulator.java:101) at beer.BEERFacade.getHourlyPrecOfDischargeTable(BEERFacade.java:815) at beer.gui.GUI_PanelExportDischarge.btnVisualizeActionPerformed(GUI_PanelExportDischarge.java:513) at beer.gui.GUI_PanelExportDischarge.access$300(GUI_PanelExportDischarge.java:28) at beer.gui.GUI_PanelExportDischarge$5.actionPerformed(GUI_PanelExportDischarge.java:166) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:5517) at javax.swing.JComponent.processMouseEvent(JComponent.java:3135) at java.awt.Component.processEvent(Component.java:5282) at java.awt.Container.processEvent(Container.java:1966) at java.awt.Component.dispatchEventImpl(Component.java:3984) at java.awt.Container.dispatchEventImpl(Container.java:2024) at java.awt.Component.dispatchEvent(Component.java:3819) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) at java.awt.Container.dispatchEventImpl(Container.java:2010) at java.awt.Window.dispatchEventImpl(Window.java:1791) at java.awt.Component.dispatchEvent(Component.java:3819) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

arec_metafora

Cara, tenta observar se a chave (key) que vc está colocando não está nula, pelo debug.

brunoneiva

Ja me liguei o que é…

minha key não tá implementando Comparable… de acordo com o JavaDOC em TreeMap as key’s tem que implementar Comparable… =D
Eu não sabia =P

brunoneiva

Resolvido :smiley:

Criado 9 de junho de 2008
Ultima resposta 9 de jun. de 2008
Respostas 9
Participantes 3