JavaFX更新循环中的项目符号位置UI

JavaFX更新循环中的项目符号位置UI,javafx,Javafx,对于我的学校项目,我必须制作一个游戏,大炮必须向飞机射击子弹,问题是,当我们射击时,我们可以在控制台上看到子弹的所有位置(X.Y),但子弹不会在UI上更新 以下是测试代码: vel = Slider.getValue(); double angle = panelNero.getRotate(); boolean dead = false; while (dead == false) { double X = P.getLayoutX(); double Y = P.getLa

对于我的学校项目,我必须制作一个游戏,大炮必须向飞机射击子弹,问题是,当我们射击时,我们可以在控制台上看到子弹的所有位置(X.Y),但子弹不会在UI上更新

以下是测试代码:

vel = Slider.getValue();
double angle = panelNero.getRotate();
boolean dead = false;

while (dead == false) {
    double X = P.getLayoutX();
    double Y = P.getLayoutY();
    if (X > 1 && Y > 1 && X < MP.getWidth() && Y < MP.getHeight()) {
        System.out.println("x: " + X + " y: " + Y + " maxX: " + MP.getWidth() + " maxY: " + MP.getHeight());

        double x = P.getLayoutX();
        double y = P.getLayoutY();
        P.setLayoutX(x += (Math.cos(Math.toRadians(angle)) * vel));
        P.setLayoutY(y += (Math.cos(Math.toRadians(angle)) * vel));
        System.out.println("VIVO");
        try {
            TimeUnit.MILLISECONDS.sleep(500);
        } catch (InterruptedException ex) {
            Logger.getLogger(FileFXMLController.class.getName()).log(Level.SEVERE, null, ex);
        }
    } else {
        System.out.println("MORTO");

        P.setLayoutX(pro.posX);
        P.setLayoutY(pro.posY);
        dead = true;
    }
}
vel=Slider.getValue();
双角度=panelNero.getRotate();
布尔死=假;
while(dead==false){
double X=P.getLayoutX();
双Y=P.getLayoutY();
如果(X>1&&Y>1&&X
请看这篇文章:

您可以使用
Platform.runlater()
从非GUI线程更新GUI。在这种情况下,您的更新请求被放入队列中,并由GUI线程尽快处理

但由于这是一个更复杂的迭代,您可以考虑在新的<代码>线程< /代码>中使用<代码>任务>代码> < /P> 我建议您使用类似以下内容:

Task task = new Task<Void>() {
    @Override
    public Void call() throws Exception {
        while (dead == false) {
            Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    P.setLayoutX(...);
                    P.setLayoutY(...);
                }
            });
            Thread.sleep(500);
        }
    }
};
Thread th = new Thread(task);
th.start();
Task Task=新任务(){
@凌驾
public Void call()引发异常{
while(dead==false){
Platform.runLater(新的Runnable(){
@凌驾
公开募捐{
P.setLayoutX(…);
P.setLayoutY(…);
}
});
睡眠(500);
}
}
};
线程th=新线程(任务);
th.start();