Hallo an alle.
Ich versuche gerade in einem Java Programm den SwingWorker sinnvoll zu verwenden.
Mein Problem ist folgendes:
Ich habe einen Algorithmus den ich jederzeit die aktuell besten Ergebnisse abfragen kann.
Er kann terminieren, muss aber nicht.
Nun habe ich eine JList in der ich z.B. alle 2 Sekunden die aktuell besten Ergebnisse anzeigen lassen möchte, nur weiß ich wirklich nicht wie ich das mit Timer usw. machen soll.
Ich weiß nicht wie ich in der doInBackground() Methode sage dass die JList periodisch aktualisiert wird. Hatte schon was mit einem Timer/TImerTask versucht, aber er ist dann aus dem doInBackground()-Zweig in die done()-Methode gesprungen.
Wenn evtl. von euch jemand Vorschläge hat wär das echt super.
Grüße
Lorenz
Ich versuche gerade in einem Java Programm den SwingWorker sinnvoll zu verwenden.
Mein Problem ist folgendes:
Ich habe einen Algorithmus den ich jederzeit die aktuell besten Ergebnisse abfragen kann.
Er kann terminieren, muss aber nicht.
Nun habe ich eine JList in der ich z.B. alle 2 Sekunden die aktuell besten Ergebnisse anzeigen lassen möchte, nur weiß ich wirklich nicht wie ich das mit Timer usw. machen soll.
Code:
class ResultSwingWorker extends SwingWorker<List<Description>, List<Description>> {
LearningAlgorithm la;
@Override
public List<Description> doInBackground() {
la = getWizardModel().getOre().start(); //started einen evtl. endlosen Algorithmus
publish(la.getCurrentlyBestDescriptions(10, true));
List<Description> result = getWizardModel().getOre().getLearningResults(10);
return result;
}
@Override
public void done() {
List<Description> result = null;
try {
result = get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
updateList(result);
}
@Override
protected void process(List<List<Description>> resultLists) {
panel4.getModel().clear();
for (List<Description> list : resultLists) {
updateList(list);
}
}
void updateList(final List<Description> result) {
Runnable doUpdateList = new Runnable() {
public void run() {
panel4.getModel().clear();
for (Description d : result) {
panel4.getModel().addElement(d);
}
}
};
SwingUtilities.invokeLater(doUpdateList);
}
}
Ich weiß nicht wie ich in der doInBackground() Methode sage dass die JList periodisch aktualisiert wird. Hatte schon was mit einem Timer/TImerTask versucht, aber er ist dann aus dem doInBackground()-Zweig in die done()-Methode gesprungen.
Wenn evtl. von euch jemand Vorschläge hat wär das echt super.
Grüße
Lorenz