javafxを使用して、所定の不規則な間隔で画面に表示されるコードを作成しようとしています。タイマー( javax.swingではなくjava.util )を使用しようとしましたが、別のスレッドから作業している場合、アプリケーションで何も変更できないことがわかりました(タイマーのように)誰か教えてくださいそれらが両方とも別々のスレッドである場合、アプリケーションと対話するタイマーを取得しますか?
質問する
24949 次
3 に答える
22
JavaFX アプリケーションスレッドで将来のアクションをスケジュールjava.util.Timer
する必要はありません。java.util.concurrent.ScheduledExecutorService
JavaFX Timeline をタイマーとして使用できます。
new Timeline(new KeyFrame(
Duration.millis(2500),
ae -> doSomething()))
.play();
または、 ReactFXの便利なメソッドを使用できます。
FxTimer.runLater(
Duration.ofMillis(2500),
() -> doSomething());
Platform.runLater
アクションはJavaFXアプリケーション・スレッドですでに実行されているため、 でラップする必要はありません。
于 2014-06-03T21:48:12.900 に答える
18
berry120の回答はjava.util.Timerでも機能するため、実行できます
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);
私はこれを使用しましたが、完全に機能します
于 2013-09-06T09:51:31.300 に答える
18
JavaFX コンポーネントに触れる場合は、プラットフォーム スレッド (基本的には JavaFX のイベント ディスパッチ スレッド) から行う必要があります。これは、 を呼び出すことで簡単に実行できますPlatform.runLater()
。したがって、たとえば、これを行うことは完全に安全です。
new Thread() {
public void run() {
//Do some stuff in another thread
Platform.runLater(new Runnable() {
public void run() {
label.update();
javafxcomponent.doSomething();
}
});
}
}.start();
于 2013-05-27T11:03:36.400 に答える