Ciao a tutti!
Mi sto cimentando nel cercare di refreshare in modo automatico la mia jtable ogni tot di tempo.
Ci sono riuscito schedulando un timerTask creato passando l'istanza della mia DesktopApplicationView... per funzionare... funziona... tranne per il fatto che in qualche ciclo compare il seguente errore:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Questa è la mia TimerTask
codice:
class MyTask extends TimerTask {
private DesktopApplication1View refrashframe;
MyTask(DesktopApplication1View aThis) {
//throw new UnsupportedOperationException("Not yet implemented");
refrashframe = aThis;
}
@Override
public void run() {
System.out.println("Running the task");
refrashframe.CaricaDati();
}
}
Questo è quello che faccio nella classe DesktopApplication1View:
codice:
public DesktopApplication1View(SingleFrameApplication app) {
super(app);
initComponents();
// Permetto di selezionare solo una riga alla volta della tabella
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Riempio la tabella
CaricaDati();
java.util.Timer timer = new java.util.Timer();
java.util.TimerTask task = new MyTask(this);
// aspetta 10 secondi prima dell'esecuzione
//timer.schedule(task, 1000);
// aspetta 5 secondi prima dell'esecuzione,poi viene eseguita ogni 10 secondi
timer.schedule(task, 5000, 5000);
...
}
public void CaricaDati() {
mainPanel.setCursor(new Cursor(Cursor.WAIT_CURSOR));
try {
try {
// salvo la posizione della riga selezionata
int app = jTable1.getSelectedRow();
Connection con = desktopapplication1.DesktopApplication1.MyConection();
Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
String query = "SELECT ID_IMPIANTO, NOME_IMPIANTO, RAG_SOC, DES_MARCA, DES_MODELLO, LAST_UPDATE, MAX_ERROR_LEVEL, COUNT_ERROR, FLG_EVASO FROM MIT.WHD_ALLARMI_IMPIANTI";
ResultSet rs = st.executeQuery(query);
GenericTableModel model = new GenericTableModel();
model.parseResultSet(rs);
jTable1.setModel(model);
jTable1.updateUI();
// reimposto la posizione della riga selezionata
if (app >= 0) {
jTable1.setRowSelectionInterval(app, app);
}
} catch (Exception e) {
e.printStackTrace();
}
} finally {
mainPanel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
Secondo voi posso utilizzare un altro metodo più corretto per fare il refresh automatico?
L'errore a cosa può essere dovuto?
Grazie... per la pazienza
Alessio.