现在我正在查看一个使用Swing的现有程序,其中一个窗口具有大量自定义小部件。有一个单独的线程运行每个这些小部件的变异函数,变异函数读取某些内容的值(例如标签颜色和值),并写入一些内容(例如更改背景颜色)。请注意,没有涉及自定义绘画或类似的内容,只是对其包含的子小部件(大多数为JLabels)进行了一堆更改。
目前,这是从单独的线程运行的,而不是从Swing事件线程运行的。该线程遍历所有400个小部件,并在每个小部件上调用变异器。更新似乎正常工作,但GUI对用户输入无响应。
如果我将整个约0.4毫秒运行时间从Swing线程外部获取,并在每次调用变异器时包装在invokeLater或invokeAndWait中,则UI的响应性更高。
我想要理解的是:
1)有时从Swing线程外部进行所有这些调用是否合法?
2)对Swing线程的影响是什么,为什么从外部调用时UI不够响应?