하나의 진행률 막대에서 2 개의 중첩 된 작업의 진행률을 렌더링 할 수 있습니까? 여러 디렉토리에서 여러 파일의 행을 읽어야하는 경우를 말합니다. 나는이 코드 조각이 :진행률 작업을 하나의 진행 바아에 넣으십시오. javafx
편집 : 나는 진행률 표시 줄에 액세스 할 수 있지만 한 내가 디렉토리를 가지고, 진행 표시 줄이 0으로 다시 시작되고으로 파일을 확인하게됩니다 오전
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();
다음 디렉토리로 이동 한 다음 진행 표시 줄을 1까지 채우고 다른 디렉토리가 있으면 0으로 다시 시작하십시오.
다음 디렉토리가 읽을 때 0에서 다시 시작하고 싶지 않으므로이 두 작업을 하나로 표시하려면 어떻게해야합니까? 예를 들어 4 개의 디렉토리가있는 경우 분기가 될 때까지 진행 막대가 이동하는 것을 볼 수 있습니다.
내가 뭘 잘못하고 있는지 생각하는 사람이 있습니까? 당신은 쉽게 각 작업에 소요되는 상대적인 시간을 추정하거나 계산할 수있는 경우
답장을 보내 주셔서 감사합니다. 그러나 저에게는 도움이되지 않습니다. 내가 제안하는대로 진행하면 progressBar가 약 50 %의 파란색 막대를 표시하고 약 60 %의 디렉토리를 변경할 때 100 % 이상 실행됩니다. – cy8el1us
@ cy8el1us 아, 알았어. 원래 코드는 충분합니까? 두 번째 작업에서 진행률을 0으로 반복 설정하는 이유는 무엇입니까? 일반적으로 얼마나 많은 파일을 여기서 반복합니까? –
아니요! 코드를 줄이고 지금은 하나의 작업 만 사용하고 있습니다. 파일을 읽는 메소드에 대한 작업 액세스가 동기화되지 않은 것처럼 보일 때 결과는 모든 파일의 혼합입니다.이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 내 편집을 참조하십시오 – cy8el1us