【问题标题】:Using extended Swing component, threading doubt使用扩展 Swing 组件,线程疑惑
【发布时间】:2009-10-10 08:05:17
【问题描述】:

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

【问题讨论】:

    标签: java multithreading swing


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    当您从这些方法中修改您的组件(或在其上绘画)时,您只需要使用invokeLater()(或使用SwingWorker)调用这些方法。如果您只是进行计算,则只需要在访问结果时进行同步,例如paint() 方法。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 2013-01-07
        • 1970-01-01
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多