我做了一个进度条,它完美无缺。唯一的问题是我想显示进度百分比。首先是一些背景信息:Netwerk逐行读取一个大文件(= bestand),每次读取一行计数器上升1.所以我想得到的百分比是(counter / 1380)* 100,1380是扫描仪读入的行数。当我运行它时,Netwerk在进度条运行时读入文件,当扫描仪准备就绪时进度条停止(因此这很有效)。但百分比不升级。当我调试时,我发现在Netwerk完成读取后调用updateprogress,因此百分比保持在-100%。有人有解决方案吗?
Task<Integer> task = new Task<Integer>() {
@Override
public Integer call() throws Exception {
n = new Netwerk(bestand);
updateProgress(((n.getTeller()/1380)*100), 100);
return null;
}
};
pb = new ProgressBar();
pb.progressProperty().bind(task.progressProperty());
Label lg = new Label();
lg.textProperty().bind(Bindings.format("Even geduld... %.0f%%",
task.progressProperty().multiply(100)));
task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
progressStage.close();
SaveStage = new Stage();
//initStage
}
});
new Thread(task).start();
所以会发生的事情是我有一个带有任务的线程,即任务; 1.制作一个Netwerk,读取文件并递增计数器(我测试了计数器,它的工作原理) 2. Updateprogress()更新计数器已经很好了
然后我将任务绑定到进度条,然后用textProperty绑定标签。问题是标签没有更新。
答案 0 :(得分:0)
将变量定义为类的属性
class YourClass {
private volatile int percentage;
在您开始ProgressBar
时初始化它,并在Task
内分配:
Task task = new Task<Integer>() {
@Override
public Integer call() throws Exception {
n = new Netwerk(bestand);
// assign here the percentage variable
percentage = n.getPercentage();
if (n.getTeller() == 1380) {
return null;
}
return null;
}