在 Swing 中,GUI 应该仅由 EDT 更新,因为 GUI 组件不是线程安全的。
我的问题是,如果我有一个除 EDT 之外的线程,专用于更新特定组件,并且该组件不被程序中的任何其他线程访问,只有这个专用线程访问,可以吗?就我而言,我有一个JTable
并且线程从网络接收信息并更新表(不使用EventQueue.invokeLater
)。所有其他组件均从 EDT 更新。到目前为止我还没有看到问题,我想知道错误最终是否会出现。
UPDATE我的目的是实时更新表格。数据不断来自网络,为此,我专门为该表分配了 1 个线程,以便在数据到来时不断更新它。如果我使用 SwingUtilities.invokeLater,这意味着当 EDT 可用时该表将被更新。 swing不是应该用来满足实时更新的需求吗?
我不会试图推理它是否会工作,而是会坚持众所周知的“规则”,即您应该只使用事件调度线程与 GUI 组件进行交互。当您从网络接收数据时,只需使用以下命令更新表即可SwingUtilities.invokeLater
(or invokeAndWait
).
您可能不会立即发现问题,但很有可能您将来会发现问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)