JavaFx ProgressBar不会更新 [英] JavaFx ProgressBar doesn't update
问题描述
我尝试了解如何在多线程环境中更新ProgressBar.我在这里做错了,但我看不出它是什么.这应该只是每3秒填充一次酒吧,但事实并非如此:
Task<Void> task = new Task<Void>(){
@Override
public Void call(){
for (int i = 1; i < 10; i++) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);
updateProgress(i , 10);
}
return null;
}
};
updProg = new ProgressBar();
updProg.progressProperty().bind(task.progressProperty());
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
我想念什么?
您的示例对我来说很好.
样本每3秒充满一点,在半分钟内完全充满.
我只是将其包装在一些脚手架代码中以使其可执行,并且它无需更改即可工作(java7u15,win7).
import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ProgressTest extends Application {
public static void main(String[] args) { Application.launch(args); }
@Override public void start(Stage stage) {
Task<Void> task = new Task<Void>() {
@Override public Void call() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.interrupted();
break;
}
System.out.println(i + 1);
updateProgress(i + 1, 10);
}
return null;
}
};
ProgressBar updProg = new ProgressBar();
updProg.progressProperty().bind(task.progressProperty());
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
StackPane layout = new StackPane();
layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 10;");
layout.getChildren().add(updProg);
stage.setScene(new Scene(layout));
stage.show();
}
}
也许您一直在使用Java 8的某些早期访问版本,该版本中有一个关于ProgressBar更新的错误(现已修复).
RT-29018更新progressProperty时,ProgressBar和ProgressIndicator消失 >
I try to understand how to update a ProgressBar in a multithreaded environment. I'm doing something wrong here but I don't see what it is. This should simply fill up the bar every 3sec but it doesn't:
Task<Void> task = new Task<Void>(){
@Override
public Void call(){
for (int i = 1; i < 10; i++) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);
updateProgress(i , 10);
}
return null;
}
};
updProg = new ProgressBar();
updProg.progressProperty().bind(task.progressProperty());
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
What am I missing?
Your sample works fine for me.
The sample fills the bar a little bit every 3 seconds, completely filling the bar in half a minute.
I just wrapped it in some scaffolding code to make it executable and it worked without change (java7u15, win7).
import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ProgressTest extends Application {
public static void main(String[] args) { Application.launch(args); }
@Override public void start(Stage stage) {
Task<Void> task = new Task<Void>() {
@Override public Void call() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.interrupted();
break;
}
System.out.println(i + 1);
updateProgress(i + 1, 10);
}
return null;
}
};
ProgressBar updProg = new ProgressBar();
updProg.progressProperty().bind(task.progressProperty());
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
StackPane layout = new StackPane();
layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 10;");
layout.getChildren().add(updProg);
stage.setScene(new Scene(layout));
stage.show();
}
}
Perhaps you have been using some early access version of Java 8 which had a bug in it (now fixed) around ProgressBar updates.
RT-29018 ProgressBar and ProgressIndicator disappear when progressProperty is updated
这篇关于JavaFx ProgressBar不会更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!