Auf Thema antworten

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]



Oben