Mahlzeit,
in meinem Applet läuft eine Methode, die etwas berechnet und das Endergebnis wird am Ende ausgegeben. Um allerdings dem geneigten Nutzer das Zustandekommen dieses Endergebnisses näher zu bringen, möchte ich Zwischenergebnisse ausgeben lassen. Das soll so laufen:
Per Knopfdruck wird die Rechnung gestartet bis zum ersten Zwischenergebnis. Drückt man den Knopf erneut, wird die Rechnung bis zum nächsten Zwischenergebnis fortgeführt usw. bis schließlich das Endergebnis(welches sich aus den Zwischenergebnissen zusammensetzt) fertig dasteht.
Frage: Wie sieht mein ActionListener für diesen Knopf jetzt aus, da dieser ja jedesmal einen anderen Rechenschritt durchführen soll? Muß ich meine Methode auch ändern, bzw. aufteilen oder so?
Dank im voraus.
Gruß,
Victor
Frage: Wie sieht mein ActionListener für diesen Knopf jetzt
aus, da dieser ja jedesmal einen anderen Rechenschritt
durchführen soll?
Die Frage lautet wohl eher, wie meine Action_Performed-Methode aussieht, nicht der ActionListender.
was auf’s gleiche rauskommt.
es gibt 2 Möglichkeiten, eine komplexe und eine einfache:
die einfache:
du unterteils die Methode und merkst dir im Actionlistener (oder woanderes,… hängt von deinen Klassen ab) welches Resultat als letztes abgeliefert wurde. Und rufts dann jeweils den nächsten Teil auf (siehe „switch“-statement)
die Komplexe:
du bauts deine berechnede Funktion in einen gesonderten Thread ein:
public class XYZT extends Thread {
public void XYZT (Paramenter){
init der Berechnung…
}
public synchronized void run (){
Berechnung Teil1
anzeigen von Teil1
try {
wait()
} catch (Exception E){
}
anzeigen von Teil2
Berechnung Teil2
try {
wait()
} catch (Exception E){
}
anzeigen von Teil3
Berechnung Teil3
try {
wait()
} catch (Exception E){
}
anzeigen von Teil4
Berechnung Teil4
}
und im Actionlistener/action_performent()
{…
try {
rechner.notifyAll()
} catch (Exception E){}
}
gestartet wird das ganze mit :
…
XYZT rechner = new XYZT()
rechner.start()
…
Das .start() ist SEHR WICHTIG. auf keinen Fall .run() aufrufen.
cu
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]