Так что я очень часто пытаюсь обновить TextArea из цикла
// This code makes the UI freez and the textArea don't get updated
for(int i = 0; i < 10000; i++){
staticTextArea.appendText("dada \n");
}
Я также пытался реализовать BlockingQueue для создания задач, которые обновляют TextArea, это решило проблему зависания интерфейса, ноTextArea перестает обновляться после нескольких сотен циклов, но в то же время System.out.print ("dada \ n");работает как надо.
private static final BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(100);
private static Thread mainWorker;
private static void updateTextArea() {
for(int i = 0 ; i < 10000; i++) {
addJob(() -> {
staticTextArea.appendText("dada \n");
System.out.print("dada \n");
});
}
}
private static void addJob(Runnable t) {
if (mainWorker == null) {
mainWorker = new Thread(() -> {
while (true) {
try {
queue.take().run();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
mainWorker.start();
}
queue.add(t);
}