首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java Swing在绘制/渲染时会阻塞UI吗?

Java Swing在绘制/渲染时会阻塞UI吗?
EN

Stack Overflow用户
提问于 2018-09-24 01:17:55
回答 1查看 279关注 0票数 1

我正在编写一个编辑器,我有一些性能问题。问题是,当编辑器中有很多文本(10K行)时,Swing会阻塞UI (变得非常慢),因为有很多单词需要突出显示(重新绘制/重新渲染)。

我也使用EDT (Event Dispatch Thread)。

swing在绘制/渲染时会阻塞UI吗?当我在编辑器中输入一些单词(如异步绘制等)时,有没有什么方法可以优化渲染?

EN

回答 1

Stack Overflow用户

发布于 2018-09-24 01:41:50

正如您已经提到的,请注意始终使用SwingUtilities.invokeLater(Runnable)SwingUtilities.invokeAndWait(Runnable)事件调度线程上调用Swing绘制操作。否则你会遇到麻烦,并且会有响应性问题,最终会导致所谓的“grey - rect -Problem”,即你的框架呈现为灰色矩形,而UI不再响应(键盘、鼠标事件等)。

invokeLaterinvokeAndWait之间的不同之处在于,invokeLater会导致您传递给它的java.lang.Runnable在AWT事件调度线程上异步执行。我不知道您如何确保您的绘画操作是在EDT上完成的-所以如果您还没有使用invokeLater,请先尝试一下。

除此之外,作为优化UI性能的一般规则:总是尝试最小化必须重新绘制的区域!例如通过使用在指定时间之间重新绘制UI组件的特定区域的java.awt.Component.repaint(long tm, int x, int y, int width, int height)

也许这些链接也有帮助:

JTextArea setText(veryLongString) is taking too much time

https://pavelfatin.com/low-latency-painting-in-awt-and-swing/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52468498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档