Ekranda bazı şeyleri javafx kullanarak önceden belirlenmiş ancak düzensiz aralıklarla gösterecek bir kod yazmaya çalışıyorum. Bir zamanlayıcı (java.util, değil javax.swing) kullanmayı denedim, ancak ayrı bir iş parçacığı çalışıyorsanız uygulamada bir şey değiştiremezsiniz çıkıyor. (Timer gibi) Herkes bana nasıl bir Zamanlayıcı alabilirim Her ikisi de ayrı iş parçacığı olan uygulama ile etkileşim?Zamanlayıcılar ve javafx
cevap
Herhangi bir JavaFX bileşenine dokunursanız, bunu Platform iş parçacığından yapmanız gerekir (temelde JavaFX için olay gönderme iş parçacığıdır.) Bunu Platform.runLater()
numaralı telefonu arayarak kolayca yapabilirsiniz. Eğer
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);
bunu kullandım
yapabilirsiniz böylece
new Thread() {
public void run() {
//Do some stuff in another thread
Platform.runLater(new Runnable() {
public void run() {
label.update();
javafxcomponent.doSomething();
}
});
}
}.start();
berry120 cevap çok java.util.Timer ile çalışır ve mükemmel
JavaFX uygulama dizisindeki gelecekteki eylemleri planlamak için java.util.Timer
veya java.util.concurrent.ScheduledExecutorService
'a ihtiyacınız yoktur. Eğer ReactFX bir kolaylık yöntemi kullanabilirsiniz, Alternatif
new Timeline(new KeyFrame(
Duration.millis(2500),
ae -> doSomething()))
.play();
: Bir zamanlayıcı olarak JavaFX Zaman Çizelgesi kullanabilirsiniz, sen Platform.runLater
harekete sarmak gerekmez
FxTimer.runLater(
Duration.ofMillis(2500),
() -> doSomething());
Not bunun nedeni JavaFX uygulama iş parçacığında zaten yürütülür.
ReactFX'i kullanıyorsanız, ReactFX'in Zamanlayıcısı ve FxTimer'i nasıl duraklatır ve devam ettirirsiniz? Periyodik bir şey kaydetmek için kullanıyorum. Timeline'ın duraklatma() ve play() gibi, ReactFX'de eşdeğer bir duraklama() ve oynatma() var mı? – mk7
[JavaFX'te her iki saniyede bir etiket nasıl güncellenir] bölümüne bakın (http://stackoverflow.com/questions/16128423/how-to-update-the-label-box-every-2-seconds-in-java -fx/16138351 # 16138351); Örneğin kullanıcı arabirimini ayrı bir iş parçacığından güncelleştirmek için [Platform.runLater] (http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#runLater (java.lang.Runnable)) kullanın veya kullanın Her şeyi UI iş parçacığında tutmak için [JavaFX animasyon çerçevesi] (http://docs.oracle.com/javafx/2/api/javafx/animation/package-summary.html). – jewelsea