ディスク全体をトラバースするために Java 7 Files.walkFileTree メソッドを使用しています。カスタム FileVisitor の visitFile() メソッドから、作成した UI クラスの javafx ラベルとプログレス バーを更新しようとしています。javafx UI クラスで、タスクを作成して開始します。私はいくつかの調査を行い、誰かが FileVisitor を実装してタスクを拡張し、visitFile() から updateMessage() を実行できるようにすることを提案しましたが、それを試してみましたが、うまくいきません。Javafx UI クラス:
FileSystemTraverse task = new FileSystemTraverse(client);
// here i create label and bind it to the task
final Thread thread = new Thread(task);
thread.start();
FileSystemTraverse クラス:
public class FileSystemTraverse extends Task implements FileVisitor<Path>
{
// The usual implemented methods, constructor and so on ...
public FileVisitResult visitFile(Path filePath, BasicFileAttributes attributes) throws IOException {
Objects.requireNonNull(attributes);
Objects.requireNonNull(filePath);
if (attributes.isRegularFile()) {
// Here I do some operations and if I found the file i need
// I update the message (this is just an example)
updateMessage(filePath.toString);
}
return FileVisitResult.CONTINUE;
}
@Override
protected Object call() throws Exception {
Path path = Paths.get("D:\\");
// This one below gets updated in the UI.
updateMessage("asdkjasdkjhakj");
FileSystemTraverse printFiles = new FileSystemTraverse(client);
Files.walkFileTree(path,printFiles);
return null;
}
}
だから私の質問は - 本当にこれを行う方法はありますか? 私はスイングでこれを行うことについてどこかで読みました(パブリッシュを使用しています)が、javafxでは機能しないようです。
前もって感謝します。