Timer in Swingworker

LorenzB

Grünschnabel
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.

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
 

Neue Beiträge

Zurück