是否可以在一个进度条中呈现2个嵌套任务的进度? 我的意思是,如果我必须从几个目录中的几个文件中读取行。我有这个代码段:
编辑:
final int steps = directories.size();
Task<Integer> task2 = new Task<Integer>() {
/**
*/
@Override
protected Integer call() throws Exception {
int len = files.length;
updateProgress(0, len);
for(int i = 0; i < files.length; i++) {
final String filename = files[i].getName();
final String file = files[i].getPath();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
}
String currentLine = null;
while ((currentLine = br.readLine()) != null) {
readlines(currentLine, filename);
}
} catch (IOException xs) {
xs.getMessage();
}
System.out.println("******* Working on: " + file + " ******************************");
updateProgress(i + 1, files.length);
}
System.out.println("done: " + directoryName);
return len;
}
};
task2.setOnRunning(r -> {
DoubleBinding totalProgress = null;
for(int i = 0; i < steps; i++) {
DoubleBinding increment = task2.progressProperty().divide(steps);
if (totalProgress == null) {
totalProgress = increment;
} else {
totalProgress = totalProgress.add(increment);
}
}
progressBar.progressProperty().bind(totalProgress);
status.textProperty().bind(task2.stateProperty().asString());
statusProcess.textProperty().bind(Bindings.when(totalProgress.isEqualTo(-1))
.then("0.00")
.otherwise(task2.progressProperty().multiply(100.00).asString("%.02f %%")));
console.textProperty().bind(task2.messageProperty());
});
new Thread(task2).start();
我可以访问进度条但是只要我有目录,进度条将重新启动到0并将文件检入下一个目录然后填充进度条直到1然后重新启动到0如果有另一个目录。
如果我想在一个中显示这两个任务,我该怎么办,因为我不想在下一个目录读取时从0重新启动。如果我有4个目录,我希望看到将进度条移动到其四分之一,依此类推。
有人知道我做错了什么吗?
答案 0 :(得分:0)
您可以执行类似
的操作/home
如果您可以轻松估算或计算每项任务的相对时间,您可以相应地对每项任务的进度进行加权,而不是像上面的代码那样简单地对它们求平均值。