使用扩展的Swing组件,线程存在疑问

时间:2009-10-10 08:05:17

标签: java multithreading swing

我已经构建了自己的扩展JPanel的组件。我添加了一些像calculateWhatever()这样的方法...... 我应该用invokeLater()调用这些方法吗? 物质L& F并没有抱怨它,但我有罕见的随机绘画问题,我想知道它们是否因为扩展摇摆组件内的计算而发生。

3 个答案:

答案 0 :(得分:2)

如果您正在进行大量计算,那么在事件调度线程以外的线程中执行它们是明智的。如果您使用的是JDK 1.6,则还可以使用SwingWorker类而不是invokeLater

答案 1 :(得分:0)

在这些方法中修改组件(或绘制组件)时,只需使用invokeLater()(或使用SwingWorker)调用这些方法。如果您只是进行计算,则只需在访问结果时进行同步即可。 paint()方法。

答案 2 :(得分:0)

通常应使用SwingUtilities.invokeLaterSwingWorker将GUI组件的更改与任何潜在的锁定方案(文件I / O或远程服务器调用)或处理器密集型操作隔离开来。如果您的计算执行任何磁盘读取或写入,或者您调用服务器,我建议您重新组织代码以在AWT线程中执行所有绘制调用。同样,如果你意识到你的计算时间太长而且你的GUI看起来很缓慢,那么将它们分解是明智的。