我需要在事件分派线程的单独线程内以固定间隔更新JTable
的某些单元格。其他单元格只能由事件调度线程更新,以便两个线程永远不会更新同一个单元格。
更改JTable
的数据后,通常的方法是调用fireTableRowsUpdated()
重新绘制JTable
。通常,您在事件调度线程中调用fireTableRowsUpdated()
,但我可以在另一个线程中调用它吗?如果是这样,fireTableRowsUpdated()
也是线程安全的吗? <{1}}有可能同时更新。
答案 0 :(得分:3)
来自JTable的文档:
警告:Swing不是线程安全的。有关更多信息,请参阅Swing的线程策略。
以下links:
一般来说,Swing不是线程安全的。除非另有说明,否则必须在事件派发线程上访问所有Swing组件和相关类。
更重要的是你的问题:
此限制也适用于附加到Swing组件的模型。例如,如果将TableModel附加到JTable,则只应在事件分派线程上修改TableModel。
现在,碰巧你可以做很多违反这项政策的事情。但是,为什么在创建SwingWorker和保证以便您的代码 线程安全时很容易呢?
答案 1 :(得分:2)
如果您只想将执行传递给Event Dispatcher Thread
,请使用SwingUtilities.invokeLater()
代替SwingWorker
的更多信息