Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx 2 JavaFX2中是否有绘制或更新方法(渲染循环),以便在循环中更新UI?_Javafx 2_Javafx 8 - Fatal编程技术网

Javafx 2 JavaFX2中是否有绘制或更新方法(渲染循环),以便在循环中更新UI?

Javafx 2 JavaFX2中是否有绘制或更新方法(渲染循环),以便在循环中更新UI?,javafx-2,javafx-8,Javafx 2,Javafx 8,在Swing中,对于执行每个帧的每个UI组件,都有绘制或更新(Graphics g)方法。您可以将绘图逻辑放在重写的方法中,然后绘制所需的任何内容。JavaFX2UI的绘制方法是什么 我想做的是我的UI从套接字服务器(另一个线程)接收控制信息。每当收到控件信息时,我都应该更新UI 有两个问题: 1.控件信息来自不同的线程,无法直接访问渲染线程。 2.如何不断更新用户界面 对于Q1,我有一个解决方案,如果我知道更新函数在哪里(Q2) 我可以声明一个列表对象,并将从套接字接收的新控制命令插入列表。在

在Swing中,对于执行每个帧的每个UI组件,都有绘制或更新(Graphics g)方法。您可以将绘图逻辑放在重写的方法中,然后绘制所需的任何内容。JavaFX2UI的绘制方法是什么

我想做的是我的UI从套接字服务器(另一个线程)接收控制信息。每当收到控件信息时,我都应该更新UI

有两个问题: 1.控件信息来自不同的线程,无法直接访问渲染线程。 2.如何不断更新用户界面

对于Q1,我有一个解决方案,如果我知道更新函数在哪里(Q2)

我可以声明一个列表对象,并将从套接字接收的新控制命令插入列表。在渲染循环中,我可以观察列表对象,检索未处理的命令,并删除已处理的命令


但是,在哪里可以找到这样的渲染循环函数?我想也许我也可以用javax.concurrent.Task来完成,但我没有找到一种方法。

我想我找到了这个方法,我使用下面的方法,它可以工作。我不知道是否有更好的解决办法

  final Duration oneFrameAmt =  Duration.millis(1000/10);

        final KeyFrame oneFrame = new KeyFrame(oneFrameAmt,new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent actionEvent) {
               //put UI update here                   
            }
        });

        TimelineBuilder.create().cycleCount(Animation.INDEFINITE)
                .keyFrames(oneFrame)
                .build()
                .play();
final Duration oneFrameAmt=Duration.millis(1000/10);
最终关键帧oneFrame=新关键帧(oneFrameAmt,neweventhandler()){
@凌驾
公共无效句柄(ActionEvent ActionEvent){
//将UI更新放在这里
}
});
TimelineBuilder.create().cycleCount(Animation.Unfinite)
.关键帧(一帧)
.build()
.play();