JavaFX TextArea jede 2 Sekunde automatisch aktualisieren

1 Antwort

Es gibt da mehrere Lösungsmöglichkeiten: 

Zum Beispiel: java.util.Timer, java.util.TimerTask, javafx.Timeline

Die Klasse ist zwar schon etwas älter, aber macht genau das, was du brauchst. Damit kannst du bestimmte Aktionen zu bestimmten Zeiten ausführen. Für jeden Timer musst du einen Thread zuordnen, der die Aktionen ausführt. Da du das ganze in JavaFX machst und du eine UI-Komponente alle 2 Sekunden aktualisieren / updaten möchtest, musst du die Aktualisierung der TextArea in dem für JavaFX vorgesehenen UI-Thread ausführen.

Platform.runLater (new Runnable ( )

{

@Override public void run ( )

{

textArea.appendText ("Hallo Welt.");

}

});

In der Dokumentation solltest du Beispiele dazu finden.

Timer:

Timer timer = new Timer ( );

// Start in 1 Sekunde

timer.schedule (new Task ( ), 1000);

// Start in einer Sekunde, Ausführung alle 2 Sekunden

timer.schedule (new Task ( ), 1000, 2000);

TimerTask:

class Task extends TimerTask

{

  @Override public void run ( )

  {

    System.out.println ("Hallo Welt.");

  }

}

Als JavaFX-Entwickler könntest du natürlich auch die Klasse Timeline benutzen.

Statt Timer, das für Hintergrundprozesse benutzt wird:

new Timer ( ).schedule (new TimerTask ( )

{

@Override

public void run ( )

{

System.out.println ("Hallo Welt.");

}

}, 0, 2000); // sofort starten (0), alle 2 Sekunden ausführen (2000)

Könntest du das ganze auch in der Timeline machen (Benutzt man auch oft, um Animationen zu erzeugen (Button blinkt usw.):

Timeline timeline = new Timeline (new KeyFrame (Duration.seconds (2), new EventHandler <ActionEvent> ( )

{

@Override

public void handle (ActionEvent event)

{

System.out.println ("Hallo Welt alle 2 Sekunden.");

}

}));

timeline.setCycleCount (Timeline.INDEFINITE); // Unendlich mal wieederholen, alle 2 Sekunden timeline.play ( ); // starten

Hoffe kann dir damit.

Im Internet wirst du genug Beispiele dazu finden.

Schau auch in den Dokumentationen.

Java 7:

http://docs.oracle.com/javase/7/docs/api/