我正在使用 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;
}
}
所以我的问题是 - 真的有办法做到这一点吗?我在这里的某个地方读到了关于使用 swing (他们使用发布)执行此操作,但使用 javafx 它似乎不起作用。
先感谢您。