从EDT更新是绝对规则还是有例外?

Cra*_*lus 1 java swing multithreading real-time eventqueue

在Swing中,GUI应该仅由EDT更新,因为GUI组件不是线程安全的.

我的问题是,如果我有一个专门用于更新特定组件的EDT以外的单个线程,并且我的程序中的任何其他线程都不能访问该组件,只有这个专用线程,可以吗?在我的情况下,我有一个JTable和一个线程从网络接收信息并更新表(不使用EventQueue.invokeLater).所有其他组件都从EDT更新.到目前为止我还没有看到任何问题,我想知道最终是否会出现一个错误.

更新 我的目的是实时更新表格.数据不断来自网络,为此我专门为表格提供1个线程,以便在它们到来时更新它.如果我使用SwingUtilities.invokeLater,这意味着当EDT可用时将更新该表.不应该将swing用于实时更新要求吗?

Ric*_*arn 6

我不会试图推断它是否会起作用,而是坚持着名的"规则",即你应该只使用事件派发线程与GUI组件交互.从网络接收数据时,只需使用SwingUtilities.invokeLater(或invokeAndWait)更新表.

您可能不会立即看到问题,但您很可能在将来做到这一点.