Sto cercando di scrivere un codice che faccia apparire le cose sullo schermo ad intervalli predeterminati ma irregolari usando javafx. Ho provato a utilizzare un timer (java.util, non javax.swing) ma risulta che non è possibile modificare nulla nell'applicazione se si sta lavorando da un thread separato. (Come un timer) Qualcuno può dirmi come posso ottenere un timer per interagire con l'applicazione se sono entrambi thread separati?Timer e javafx
risposta
Se si tocca un componente JavaFX, è necessario farlo dal thread Platform (che è essenzialmente il thread di invio eventi per JavaFX). È possibile farlo facilmente chiamando Platform.runLater()
. Così, per esempio, è perfettamente sicuro per fare questo:
new Thread() {
public void run() {
//Do some stuff in another thread
Platform.runLater(new Runnable() {
public void run() {
label.update();
javafxcomponent.doSomething();
}
});
}
}.start();
risposta berry120 lavora con java.util.Timer troppo in modo da poter fare
Timer timer = new java.util.Timer();
timer.schedule(new TimerTask() {
public void run() {
Platform.runLater(new Runnable() {
public void run() {
label.update();
javafxcomponent.doSomething();
}
});
}
}, delay, period);
ho usato questo e funziona perfettamente
Non è necessario java.util.Timer
o java.util.concurrent.ScheduledExecutorService
per pianificare azioni future sul thread dell'applicazione JavaFX. È possibile utilizzare JavaFX Timeline come un timer:
new Timeline(new KeyFrame(
Duration.millis(2500),
ae -> doSomething()))
.play();
In alternativa, è possibile utilizzare un metodo comodo da ReactFX:
FxTimer.runLater(
Duration.ofMillis(2500),
() -> doSomething());
Si noti che non è necessario per avvolgere l'azione in Platform.runLater
, perché è già stato eseguito sul thread dell'applicazione JavaFX.
come si fa a mettere in pausa e riprendere il Timer e FxTimer di ReactFX se si utilizza ReactFX? Lo sto usando per salvare qualcosa periodicamente. C'è una pausa equivalente() e play() in ReactFX, proprio come la pausa di Timeline() e play()? – mk7
- 1. Timer generato da attività e attività generate da timer
- 2. JavaFX TextArea e autoscroll
- 3. JavaFX 2 e Internazionalizzazione
- 4. Supporto IntelliJ e JavaFX
- 5. Timer e TimerTask in Android
- 6. . Thread max simultanei timer timer
- 7. JavaFX 2.1 e thread? -oppure- Terminare un'applicazione JavaFX con garbo?
- 8. SimpleStringProperty e SimpleIntegerProperty TableView JavaFX
- 9. JavaFx: bordo pulsanti e hover
- 10. Avvisi JavaFX e loro dimensione
- 11. JavaFX - SplitPane, ridimensionamento e proporzioni
- 12. Differenza tra JavaFX e Vaadin
- 13. Associazione JavaFX e valori nulli
- 14. javafx, programmazione socket e thread
- 15. JavaFX Non su thread dell'applicazione fx quando si utilizza il timer
- 16. Timer di ripetizione Python veloce e preciso
- 17. Avvio e arresto di un timer PHP
- 18. Timer coffeescript e puntatore "this" in callback
- 19. SDL_AddTimer e threading, coda timer di azzeramento
- 20. Countdown Timer
- 21. Java Timer
- 22. Equivalente Android toast in JavaFX
- 23. Timer di attesa o una coda di timer? Pro e contro di ciascuno?
- 24. JavaFX Più colori in textarea (JavaFX 8)
- 25. MediaRecorder.setMaxDuration (int timer) che cosa accade quando timer scade
- 26. JavaFX e vecchio PC con Windows XP
- 27. JavaFX - Caricamento immagini e problemi di memoria
- 28. Javafx 2 clic e doppio clic
- 29. Errore grafico JavaFX con progressBar e Slider
- 30. JavaFX che funziona con thread e GUI
Vedere [Come aggiornare un'etichetta ogni 2 secondi in JavaFX] (http://stackoverflow.com/questions/16128423/how-to-update-the-label-box-every-2-seconds-in-java -fx/16138351 # 16138351); cioè utilizzare [Platform.runLater] (http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#runLater (java.lang.Runnable)) per aggiornare l'interfaccia utente da un thread separato o utilizzare il [framework di animazione JavaFX] (http://docs.oracle.com/javafx/2/api/javafx/animation/package-summary.html) per mantenere tutto nel thread dell'interfaccia utente. – jewelsea