0

我需要JTable在与事件调度线程不同的线程中以固定间隔更新 a 的某些单元格。其他单元格只能由事件调度线程更新,因此两个线程永远不会更新同一个单元格。

一旦更改了 a 的数据JTable,一种常见的方法是调用fireTableRowsUpdated()重新绘制JTable. 通常,您fireTableRowsUpdated()在事件调度线程中调用,但我可以在另一个线程中调用它吗?如果是这样,也是fireTableRowsUpdated()线程安全的吗?有可能JTable同时更新。

4

2 回答 2

3

JTable的文档中:

警告:Swing 不是线程安全的。有关更多信息,请参阅 Swing 的线程策略。

链接到以下内容:

一般来说,Swing 不是线程安全的。除非另有说明,否则所有 Swing 组件和相关类都必须在事件调度线程上访问。

更重要的是你的问题:

此限制也适用于附加到 Swing 组件的模型。例如,如果将 TableModel 附加到 JTable,则只能在事件调度线程上修改 TableModel。

现在,碰巧你可以做很多违反这项政策的事情。但是,当创建SwingWorker保证您的代码线程安全的很容易时,为什么要这样做呢?

于 2013-05-17T16:56:40.427 回答
2

如果您只想将执行传递给事件调度程序线程,请使用SwingUtilities.invokeLater()而不是SwingWorker

更多关于SwingUtilities.invokeLater

于 2013-05-17T18:22:35.037 回答