【发布时间】:2017-02-06 18:09:01
【问题描述】:
...
public ProgressBar loadProgressBar;
...
Task task = new Task<Void>()
{
@Override
public Void call()
{
Platform.runLater(()
->
{
Stage stage = new Stage();
Group root = new Group();
Scene scene = new Scene(root, 2000, 2000, Color.BLACK);
stage.setTitle("JavaFX Scene Graph Demo");
stage.setScene(scene);
stage.setMaximized(true);
// stage.show();
Label tempLbl = new Label();
double h=0;
root.getChildren().add(tempLbl);
tempLbl.setText("");
for (int i = 0; i < 10000000; i++)
{
tempLbl.setText(tempLbl.getText()+"asd");
root.applyCss();
root.layout();
w=w+tempLbl.getHeight();
updateProgress(i, 10000000);
}
});
return null;
}
};
loadProgressBar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
如果去掉 Platform.runLater tempLbl.getHeight() 总是等于 0。 如果您让 Platform.runLater loadProgressBar 在达到 100% 之前不更新。 如何避免?
【问题讨论】:
-
你能至少解释一下你认为这段代码应该做什么吗?
-
这是一个简化版。采用完整版文本,根据字体、高度和长度进行分页。每次页面结果都不同,具体取决于设置。代码只需要对其进行计数即可。但是没有制动第二个流,或者因为我没有这样做。
-
我知道这可能只是一个示例,但代码完全没有意义。为什么要创建一个在后台线程上运行的东西,而它只是在 FX 应用程序线程上转身并执行整个事情?
-
如果代码不在UI线程中运行,则高度tempLbl保持等于0。代码不起作用。
-
当代码毫无意义时,我什至不知道“工作”是什么意思。
标签: java javafx progress-bar