Получение TextArea для прокрутки вниз - самая простая часть. Просто используйте appendText вместо установки всего текстового значения TextArea:
textAreaLog.appendText(count[0] + " File " + file + "\n");
Большая проблема, как указал Мэтт, заключается в том, что вы заполняете поток приложения JavaFX. Обход дерева файлов довольно быстро перечисляет файлы, и вы отправляете так много Runnables в поток приложения, что поток не успевает выполнить свою обычную обработку, такую как рисование окна и обработка пользовательского ввода.
Есть несколько способов справиться с этим. Простой подход заключается в добавлении режима ожидания:
try {
latch.await();
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
Другой подход заключается в создании собственного буфера, поэтому вы будете добавлять текст большими кусками, например, каждые 1000 строк:
System.out.println("Inicia Visitador de Directorios");
int maxBufferSize = 1000;
Collection<String> buffer = new ArrayList<>(maxBufferSize);
Files.walkFileTree(dir.toPath(), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
++count[0];
buffer.add(count[0] + " File " + file + "\n");
if (buffer.size() >= maxBufferSize) {
String lines = String.join("", buffer);
buffer.clear();
Platform.runLater(() -> textAreaLog.appendText(lines));
}
return FileVisitResult.CONTINUE;
}
});
String lines = String.join("", buffer);
Platform.runLater(() -> textAreaLog.appendText(lines));