首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX直放站

JavaFX直放站
EN

Stack Overflow用户
提问于 2014-11-17 09:38:08
回答 4查看 297关注 0票数 0

我想要一个类似于TimerTask in JavaFX的东西。

我有一个函数的顺序,这个函数应该每1/2秒重复一次,也许每1/4秒重复一次。

这个函数对JavaFX中的GUI组件有一定的影响。

你能给我举一个TimerTask (JavaFX)的例子吗?我不能使用计时器任务,因为编译器说:

代码语言:javascript
复制
Exception in thread "Timer-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = Timer-0
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:237)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:398)
at javafx.scene.Parent$1.onProposedChange(Parent.java:245)
at com.sun.javafx.collections.VetoableObservableList.clear(VetoableObservableList.java:146)
at com.sun.javafx.charts.Legend$1.onChanged(Legend.java:55)
at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:134)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
at com.sun.javafx.collections.ObservableListWrapper.callObservers(ObservableListWrapper.java:97)
at com.sun.javafx.collections.ObservableListWrapper.clear(ObservableListWrapper.java:184)
at javafx.scene.chart.AreaChart.updateLegend(AreaChart.java:420)
at javafx.scene.chart.XYChart$2.onChanged(XYChart.java:96)
at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:134)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
at com.sun.javafx.collections.ObservableListWrapper.callObservers(ObservableListWrapper.java:97)
at com.sun.javafx.collections.ObservableListWrapper.removeFromList(ObservableListWrapper.java:383)
at com.sun.javafx.collections.ObservableListWrapper.removeAll(ObservableListWrapper.java:271)
at de.sick.suit.framework.control.fx.HistogramChart.deleteData(HistogramChart.java:170)
at de.sick.suit.framework.samples.ImageHistogram.run(ImageHistogram.java:200)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

谢谢你的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-11-18 07:25:21

代码语言:javascript
复制
// TIMER
        Timeline line = new Timeline(new KeyFrame(Duration.seconds(0.2), new EventHandler<ActionEvent>()
        {
            @Override
            public void handle(ActionEvent arg0)
            {
                sek++;

                puls(imgHisto, startingArea);
                System.out.println(" Sek: " + sek);
            }
        }));
        line.setCycleCount(Animation.INDEFINITE);
        line.play();

我用TimeLine来解决这个问题。这对于我的例子来说很好!

票数 0
EN

Stack Overflow用户

发布于 2014-11-17 23:09:28

您可以使用ScheduledService。javadoc中的示例:

您可能希望定期对服务器进行ping,以查看是否有任何更新。像ScheduledService这样的实现方式如下: ScheduledService svc =新ScheduledService<>(Duration.seconds(1)) {受保护的任务createTask() {返回新任务(){受保护的文档调用(){ //连接到服务器//获取XML文档//将其解析为文档返回文档;}})

票数 0
EN

Stack Overflow用户

发布于 2015-11-02 14:32:59

您需要提供更多的代码,但到目前为止,我认为您没有正确地更新UI。如果您处于另一个线程中(如果您使用的是任务),则无论何时您想要更新您需要使用的UI

代码语言:javascript
复制
Platform.runLater();

你的Stacktrace表明了这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26969586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档