G
Guest
Gast
Hallo,
Ich führe aus der doInBackground() eine Methode calculate() einer _anderen Klasse_ aus. Da die calculate() in den meisten Fällen ne ganze Weile brauchen wird, habe ich eine ProgressBar in der GUI. Jedoch kann ich nicht wirklich aus der calculate() auf setProgress() bzw. publish() der SwingWorker Klasse zugreifen. Die Frage ist klar .. wie mach ich des _geschickt_? ich steh komplett aufm Schlauch :|
Ich hab es zwar hinbekommen mittels Observer.. aber die Geschichte ist extrem bescheiden. Der Grund ist folgender:
Button wird gedrückt -> actionPerformed -> Worker execute() -> doInBackground() -> calculate() hier wird der neue progress bestimmt und Observer informiert mit notifyObservers(progress) -> update() aus der ich nun publish(progress) vom SwingWorker aufruf damit ich zurück aufn EDT komme -> process() hier ruf ich ENDLICH die setProgress() auf und da ich einen Listener drauf habe kommt zum Schluss propertyChange() und ich kann endlich den neuen ProgressBar Wert setzen.
Ich könnt es mir zwar einfach machen indem ich einfach den Code aus calculate() in doInBackground() paste.. jedoch wollt ich die GUI von der Berechnung/Logik trennen.
Und eine Indeterminate ProgressBar möcht ich auch nicht.
Also nochmal zusammenfassend .. wie komm aus der calculate() an die setProgress() des SwingWorkers am besten ran ?
Danke
Ich führe aus der doInBackground() eine Methode calculate() einer _anderen Klasse_ aus. Da die calculate() in den meisten Fällen ne ganze Weile brauchen wird, habe ich eine ProgressBar in der GUI. Jedoch kann ich nicht wirklich aus der calculate() auf setProgress() bzw. publish() der SwingWorker Klasse zugreifen. Die Frage ist klar .. wie mach ich des _geschickt_? ich steh komplett aufm Schlauch :|
Ich hab es zwar hinbekommen mittels Observer.. aber die Geschichte ist extrem bescheiden. Der Grund ist folgender:
Button wird gedrückt -> actionPerformed -> Worker execute() -> doInBackground() -> calculate() hier wird der neue progress bestimmt und Observer informiert mit notifyObservers(progress) -> update() aus der ich nun publish(progress) vom SwingWorker aufruf damit ich zurück aufn EDT komme -> process() hier ruf ich ENDLICH die setProgress() auf und da ich einen Listener drauf habe kommt zum Schluss propertyChange() und ich kann endlich den neuen ProgressBar Wert setzen.
Ich könnt es mir zwar einfach machen indem ich einfach den Code aus calculate() in doInBackground() paste.. jedoch wollt ich die GUI von der Berechnung/Logik trennen.
Und eine Indeterminate ProgressBar möcht ich auch nicht.
Also nochmal zusammenfassend .. wie komm aus der calculate() an die setProgress() des SwingWorkers am besten ran ?
Danke
Code:
public class GUI{
class Worker extends SwingWorker implements Observer{
doInBackground()
done()
process()
}
}
class Calculator{
calculate()
}