Java return-Wert jede Sekunde ändern und übergeben

Hallo, ist es irgendwie möglich einen return-Wert welchen ich alles 1-2 Sekunden ändere immer bei einer Änderung oder nach einer bestimmten Zeit übergeben zu lassen ?

Da ich nicht weis, ob hier das einfügen von Code unterstützt wird habe ich mal etwas mit Pastebin eingefügt. http://pastebin.com/p4d5sJwe

Diese Methode schreibt in returnlbl alle 2 Sekunden einen zufälligen String, wenn ich jetzt return returnlbl; machen würde, würde ich ja nur den letzten Wert nach dem Ende der for-Schleife übergeben. Ich möchte allerdings jeden einzelnen Wert übergeben, mit der Pause, kann das ganze also nicht einfach in ein Array schreiben.
Der Sinn des ganzen ist es in der Main-Methode JLabel welche dem übergebenen String wert entsprechen anzuzeigen.
Es sollen also mehrere JLabel kurz aufeinander angezeigt werden, wie eine Art DiaShow.

Danke

He SciMan,

es stellt sich ein wenig die Frage, was genau du machen willst. Wenn du den „return-Wert“ alle zwei Sekunden ändern willst, dann hast du das Prinzip von Methoden in der Objektorientirung nicht richtig verstanden.

Aber dem zweiten Absatz entnehme ich, dass du eigentlich alle zwei Sekunden eine Eigenschaft (text) einer Swing-Komponente (JLabel) ändern möchtest.

Da geht dein Ansatz mit dem Thread schon in die richtige Richtung:
Übergebe doch einfach deiner Thread-Klasse im Konstruktor das entsprechende Label und änder dann alle zwei Sekunden mit Hilfe der setText()-Methode den Text des Labels.

Grüße!
Java-Helfer

Wenn Du mit „return“- Wert, den Rückgabe Wert einer Methode meinst, so ist das nicht möglich.

Um über Änderungen einer Variable informiert zu werden, so kannst du z.B. das Observer-pattern verwenden: http://de.wikipedia.org/wiki/Beobachter_(Entwurfsmus….

Verschiebe die Logik mit der Schleife in eine Klasse die PropertyChangeSupport unterstützt, und implementiere den PropertyChangeListener in der ursprünglichen Klasse. Feuer nach jeder Änderung ein PropertyChangeEvent, das Du dann auswerten kannst. Dafür gibt es auch Beispiele im Internet.

Fang mal hiermit an: http://openbook.galileodesign.de/javainsel8/javainse…

Hallo,

return-Werte kann man nicht ändern …

Die gesucht Klasse heißt javax.swing.Timer
(siehe http://docs.oracle.com/javase/tutorial/uiswing/misc/… )
Es gibt aber auch einen Timer java.util.Timer

Die Klasse Timer ruft im vorgegebenen Intervall einen ActionListener auf, der dann die notwendigen Aktionen ausführen kann, z.B. einen Text ermitteln und an das JLabel übergeben, etwa so:


JLabel label = new JLabel(T"Test");
int count = 0;

javax.swing.Timer t = new javax.swing.Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
label.SetText(„Test“ + count++);
}
});
t.setRepeats(true);
t.start();

(das hab ich jetzt aber nicht ausprobiert …)

Du kannst den return-wert nicht mehrfach zurückgeben.
Das Label muss also direkt in der Schleife geändert werden.

Alternativ könntest du dir das Listener-Pattern anschauen, wenn du mehrere veränderliche Texte und mehrere Labels hast wirst du nicht ohne auskommen.

Hallo SciMan,

  1. return-Wert ist an der Stelle der Falsche Ausdruck.
    return beendet die aufgerufene Methode und gibt einen Wert zurück, das ist ja nicht das was du willst.

  2. Wenn ich deine intention richtig verstanden habe soll der inhalt eines Labels durch einen Thread geändert werden.

Hier würde ich das Label dem Thread übergeben und dann den Labeltext im Thread setzen.

Allerdings ist zu beachten, dass swing und threads nicht ganz so einfach miteinander funktionieren, wenn ich mich richtig entsinne muss das Runnable dann im EventDispatchThread laufen, da weiß ich auf die Schnelle aber gerade nicht wie das funktioniert, das kann man aber zum Beispiel hier nachlesen http://docs.oracle.com/javase/tutorial/uiswing/concu….

Für einen ersten Test sollte das aber so funktionieren wie ich es oben beschrieben habe.

Grüße,
Heinz