【发布时间】:2016-10-17 14:37:14
【问题描述】:
我想更新由另一个类在 FXML 文件中定义的 JavaFX ProgressBar,并在控制器线程中初始化。目前它只是没有更新。
test.fxml
<ProgressBar fx:id="progressBar" prefWidth="5000.0" progress="0.0">
<VBox.margin>
<Insets top="3.0" />
</VBox.margin>
</ProgressBar>
Controller.java
@FXML
public static ProgressBar progressBar = new ProgressBar(0);
MyMain main;
@FXML
private void handleStartWork() throws Exception {
new Thread() {
@Override
public void run() {
try {
main = new MyMain();
main.doIt();
} catch (final Exception v) {
// ...
}
}
}.start();
}
MyMain.java
public void doIt(){
while(...){
Platform.runLater(() -> PoCOverviewController.progressBar.setProgress((count / sum) * 100));
}
}
考虑到以下帖子,我已经尝试了不同的版本:
- ProgressBar doesn't work with a fxml file and a controller
- How to configure Progress Bar and Progress Indicator of javaFx?
我不知道将 ProgressBar 设为静态是否是正确的方法。我只是不想通过工作流传递对象。
更新(Xavier Lambros 回答): 现在我用单例尝试了它,但它仍然无法正常工作:
Controller.java
@FXML
public ProgressBar progressBar = new ProgressBar(0);
private static Controller INSTANCE = new Controller();
public static Controller getInstance() {
return INSTANCE;
}
public ProgressBar getProgressBar() {
return progressBar;
}
MyMain.java
public void doIt(){
while(...){
Platform.runLater(() -> Controller.getInstance().getProgressBar()
.setProgress((count / sum) * 100));
}
}
【问题讨论】:
-
@fabian 从 ProgressBar 中删除了 static 修饰符,但也不起作用。
-
是
count和sumints 还是longs?那么下面的问题应该会有所帮助:stackoverflow.com/questions/4685450/why-is-the-result-of-1-3-0 -
@fabian 实际上它们是不同的数据类型,但我已经在转换它们了。 ((double) count / (double) sum) * 100) 我想让这个例子尽可能短。
标签: java multithreading javafx fxml