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.
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.
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.
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();
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.
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.