所以我试图从循环非常频繁地更新文本区域// This code makes the UI freez and the textArea don't get updatedfor(int i = 0; i < 10000; i++){ staticTextArea.appendText("dada \n");}我还尝试实现一个BlockingQueue来创建更新TextArea的任务,这解决了UI的冻结问题,但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); }
1 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
发生这种情况是因为你阻止了 UI 线程。
JavaFX 提供了该类,该类公开了该方法。该方法可用于在 JavaFX 应用程序线程(与 UI 线程不同)上运行长时间运行的任务。PlatformrunLater
final Runnable appendTextRunnable =
() -> {
for (int i = 0; i < 10000; i++) {
staticTextArea.appendText("dada \n");
}
};
Platform.runLater(appendTextRunnable);
添加回答
举报
0/150
提交
取消