Hi,
Wozu brauchst du die Zeile in der Methode: createWorker(File fileRoot) ?
[code=Java]else{
new Thread(createWorker(file)).start();
}[/code]
Möchtest du damit rekursiv alle pdfs von allen Verzeichnissen ermitteln?
Hier mal ein Beispiel wie es gehen könnte; aber ohne Rekursion und es werden nur die pdfs-vom Root-Verzeichnis ermittelt.
Controller.java: (Controller vom fxml)
[code=Java]import java.io.File;
import java.util.LinkedList;
import java.util.List;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
public class Controller {
@FXML
private Button startButton;
@FXML
private ProgressBar meineProzessBar;
@FXML
private Label label;
private Task<Boolean> copyWorker;
private int countPDF;
private File directory;
@FXML
private void actionStart(ActionEvent event) {
String path = "C:\\Users\\user\\eBooks\\";
directory = new File(path);
if(!directory.isDirectory())
return;
countPDF = 0;
copyWorker = createWorker(directory);
copyWorker.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
startButton.setDisable(false);
label.textProperty().unbind();
label.setText("Total wurden " + countPDF + " PDF-Dateien gefunden!");
}
});
meineProzessBar.progressProperty().unbind();
meineProzessBar.progressProperty().bind(copyWorker.progressProperty());
label.textProperty().bind(copyWorker.messageProperty());
new Thread(copyWorker).start();
startButton.setDisable(true);
}
private Task<Boolean> createWorker(File fileRoot) {
return new Task<Boolean>() {
@Override
protected Boolean call() throws Exception {
List<File> fileList = new LinkedList<>();
File[] files = fileRoot.listFiles();
for(File file : files) {
if(file.isDirectory())
continue;
fileList.add(file);
}
for (File file : fileList) {
String dateiName = file.getName();
if(dateiName.endsWith(".pdf")){
updateMessage(++countPDF + "");
updateProgress(countPDF, fileList.size());
Thread.sleep(200);
}
}
return true;
}
};
}
}[/code]