gpt4 book ai didi

java - 随线程更新场景

转载 作者:行者123 更新时间:2023-12-02 11:31:58 26 4
gpt4 key购买 nike

我试图让一个场景逐步显示对我在线程中定期更新的类实例所做的更改。

到目前为止我已经

 public void start(Stage primaryStage) {   
Environment env = new Environment(10, 10);
StackPane layout = new StackPane();

primaryStage.setTitle("Vacuum World");
Button btn = new Button();
btn.setText("Start");

Text text = new Text();

btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Thread t = new updateThread(env, text);
t.run();
}
});

layout.getChildren().add(btn);
layout.getChildren().add(text);
primaryStage.setScene(new Scene(layout));
primaryStage.show();
}

以及有问题的线程:

public class updateThread extends Thread {
Environment env;
Text text;

public updateThread(Environment env, Text text) {
this.env = env;
this.text = text;
}

public void run() {
int updatesPerSecond = 2;
int nbUpdates = 0;
int targetTime = 1000 / updatesPerSecond;
long currentTime;
long lastTime = System.nanoTime();
long elapsedTime;
long sleepTime;

while (nbUpdates < 10) {
currentTime = System.nanoTime();

elapsedTime = currentTime - lastTime;
lastTime = currentTime;

this.env.update();
text.setText(this.env.show());

nbUpdates++;
sleepTime = targetTime - (elapsedTime / 1000000000);

if (sleepTime < 0) {
sleepTime = 1;
}

try {
Thread.sleep(sleepTime);
} catch(Exception e) {
e.printStackTrace();
}
}
}
}

我最终得到的是按下按钮后,线程运行并正确更新环境,但场景仅在线程运行完成后更改一次,并且在线程运行时不会更新。知道如何获得我想要的结果吗?

最佳答案

您调用Thread.run,它在当前线程Thread的run方法>。您需要使用 Thread.start 来创建新线程。

来自不同线程的进一步更新应使用 Platform.runLater 完成:

...
this.env.update();
final String newText = this.env.show();
Platform.runLater(() -> text.setText(newText))
...

另请注意,纳秒为 10^-9 秒 = 10^-6 毫秒。您应该除以 1_000_000 而不是 1_000_000_000,并且可能在环境/UI 更新后进行计时,因为这也可能需要一些时间。

关于java - 随线程更新场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49229335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com