java - 在非 AWT 线程中更新 AbstractTableModel 中的数据的最佳实践

标签 java multithreading swing jtable abstracttablemodel

我已经将 AbstractTableModel 子类化,用作我的 JTable 的模型。每当添加数据时,我都会在 AWT 线程中调用 fireTableRowsInserted()。通过使用同步方法,对我的底层容器的所有访问都是线程安全的。

到目前为止,这种模式对我来说效果很好。但是现在我想从列表中删除数据我已经意识到我有一个线程问题。如果我删除一行并在 AWT 线程中调用 fireTableRowsDeleted(),我仍然可以为现在不再存在的行索引调用 getValueAt()

在 AWT 线程外对表模型执行操作的最佳实践是什么?

最佳答案

恕我直言,最佳做法是避免这样做。将另一个线程对模型的每次访问包装在 Runnable 中,并使用 SwingUtilities.invokeLater 更新模型。

关于java - 在非 AWT 线程中更新 AbstractTableModel 中的数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6670128/

相关文章:

java - 如何在 Java Swing 中将图像用作按钮

java - 在 Java Swing 中,如何获得对窗口的 Win32 窗口句柄 (hwnd) 引用?

java - 在 JavaFX 动画中模拟真实的弹跳

java - android asynchttpclient javax.net.ssl.SSLHandshakeException : Handshake failed

java - 线程缺少其他线程的更新

Java GUI (SWING/AWT) - 空框架 - 组件未显示

java - Android OpenCV 内存泄漏

java - 如何在 JavaDocs 中引用 "*/"

java - 在 RabbitMQ 中使用单 channel 与单线程执行器通信可以吗?

java - Java线程不会同步