Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在非事件分派线程中调用fireTableRowsUpdated()是否安全?_Java_Swing - Fatal编程技术网

Java 在非事件分派线程中调用fireTableRowsUpdated()是否安全?

Java 在非事件分派线程中调用fireTableRowsUpdated()是否安全?,java,swing,Java,Swing,我需要在独立于事件分派线程的单独线程中以固定的间隔更新JTable的一些单元格。其他单元格只能由事件调度线程更新,这样两个线程将永远不会更新同一单元格 更改JTable的数据后,常用的方法是调用fireTableRowsUpdated()重新绘制JTable。通常,您在事件分派线程内调用fireTableRowsUpdated(),但我可以在另一个线程内调用它吗?如果是,那么fireTableRowsUpdated()也是线程安全的吗?有可能同时更新JTable。来自以下文档: 警告:Swing

我需要在独立于事件分派线程的单独线程中以固定的间隔更新
JTable
的一些单元格。其他单元格只能由事件调度线程更新,这样两个线程将永远不会更新同一单元格


更改
JTable
的数据后,常用的方法是调用
fireTableRowsUpdated()
重新绘制
JTable
。通常,您在事件分派线程内调用
fireTableRowsUpdated()
,但我可以在另一个线程内调用它吗?如果是,那么
fireTableRowsUpdated()
也是线程安全的吗?有可能同时更新
JTable

来自以下文档:

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

本报告涉及以下内容:

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

还有你问题的重点:

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


现在,碰巧你做了很多违反这项政策的事情,却可以逍遥法外。但是,当创建一个线程并保证代码是线程安全的非常容易时,为什么要这样做呢?

来自以下文档:

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

本报告涉及以下内容:

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

还有你问题的重点:

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


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

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


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


关于

的更多信息,您永远不应该直接调用fireTableRowsUpdated()。这是TableModel的工作。您也可以使用Swing计时器来完成。您不应该直接调用fireTableRowsUpdated()。这是TableModel的工作。您也可以使用Swing计时器来完成这项工作。