我对JavaFX比较陌生,并编写了一个小程序,它启动了许多(通常在3到10个)子流程之间。每个进程都有一个显示当前状态的专用选项卡和一个附加进程输出的大TextArea。为简单起见,所有选项卡都是在启动时生成的。
javafx.application.Platform.runLater(() -> logTextArea.appendText(line)))
当子流程上的工作负载低 - 中等(不是很多日志)时,applet工作正常,但是当子流程被大量使用并且生成大量的日志记录输出(每个数百行很好)时,applet开始冻结总计第二名。
我研究了将TextArea绑定到输出,但我的理解是它有效地调用了Platform.runLater()
方法,因此每秒仍会有数百次调用JavaFX应用程序线程。
批量记录输出不是理想的解决方案,因为我希望尽可能保持显示的日志。
我认为可能解决问题的唯一解决方案似乎是动态加载各个标签。这肯定会阻止不必要的调用来更新当前不可见的日志文本,但在我继续进行更改之前,我想在这里得到一些有用的建议。谢谢!
答案 0 :(得分:0)
感谢您的所有建议。终于在今天开始实施修复。
通过使用缓冲器和辅助检查确定时间间隔(最多20行或100毫秒)来解决该问题。
此外,我还实施了滚动输出,将总流程输出限制为1,000行。
再次感谢您的宝贵贡献!