gpt4 book ai didi

java - 在 updateProgress 期间将文本附加到 JavaFX TextArea

转载 作者:行者123 更新时间:2023-11-30 08:02:23 25 4
gpt4 key购买 nike

我在下面有这个简单的代码,它在 updateProgress 期间更新 TextArea:

textArea = new TextArea();
textArea.setEditable(false);
textArea.setFocusTraversable(false);

StackPane root = new StackPane();
root.setPadding(new Insets(10));
root.getChildren().add(textArea);

Scene scene = new Scene(root, 600, 350);

primaryStage.setTitle("JavaFX Concurrency");
primaryStage.setScene(scene);
primaryStage.show();

task = new Task<Integer>(){
@Override
protected Integer call() throws Exception {
int i;
for(i = 1; i <= 100; i++){
updateProgress(i, 100);
}
return i;
}
};
task.stateProperty().addListener(new ChangeListener<State>(){
@Override
public void changed(ObservableValue<? extends State> observable, State oldValue, State state) {
System.out.println(state);
}
});
task.progressProperty().addListener(new ChangeListener<Number>(){
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number val) {
Platform.runLater(new Runnable(){
@Override
public void run() {
textArea.appendText("Value : " + val.intValue() + "\n");
}
});
}
});
new Thread(task).start();

但不幸的是结果是错误的。这是输出:

enter image description here

我原以为输出应该是 Value : 1 到 Value : 100。

我只是想测试 JavaFX 中的并发包。有人能告诉我这是怎么回事吗?

最佳答案

如果你插入一个简单的:

Thread.sleep(10);

调用 updateProgress(i, 100); 后,一切都会好起来的。这来自 updateProgress 的文档:

Calls to updateProgress are coalesced and run later on the FX application thread, and calls to updateProgress, even from the FX Application thread, may not necessarily result in immediate updates to these properties, and intermediate workDone values may be coalesced to save on event notifications. max becomes the new value for totalWork.

在此之后您可以体验到更多的文本行附加到您的文本框,但是:

这并不能确保您的所有更新都将在您的文本框上完成!

如果要确保这一点,请直接在 Platform.runlater(...) block 中包装的任务的 call() 中调用 GUI 更新。

关于java - 在 updateProgress 期间将文本附加到 JavaFX TextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36996502/

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