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<TimeSerieDataPK, Double> 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…
[code]
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;
}
}[/code]
A classe que representa a minha série de dados temporal é a seguinte:
[code]
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);
}
(…)
}[/code]
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