|
|
1
2
Swing API不是线程安全的,除了一些方法调用: 重漆 , 再验证 和 使无效 . 所有其他调用,除非对特定类另有说明 必须 在事件调度线程上进行。 从生成的后台/工作线程传输此类调用处理可以通过 swingutilities.Invokelater()。 或 swingutilities.invokeAndWait()。 . 还有一些关于jtable和任何已附加到jtable实例的TableModel的具体讨论。 javax.swing package summary javadocs . 两者都不是线程安全的,因此必须在事件调度线程上执行从中访问数据的任何调用。 这是您遇到异常的最可能原因,在调试程序中运行时遇到的不同行为是一个典型的竞争条件标志。也没有可靠的方法可以通过引入您自己的锁等来绕过这个问题。从长远来看,这种做法总是会导致麻烦(例如,在Swing库内部的事件调度队列锁的死锁),因为Swing实际上并没有被设计成线程安全的。 |
|
|
2
1
发生异常是因为其中一个表模型为getValueAt(int row,int column)调用返回空值。原因可能是Swing或数据模型中的内部问题,因为您正在使用辅助线程访问数据模型。Swing API特别声明不能按照您描述的方式使用辅助线程。 下面的文章提供了关于Swing中的单线程规则的进一步详细信息。 http://java.sun.com/products/jfc/tsc/articles/threads/threads3.html |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 1 年前 |
|
|
András Takács · Python多线程错误 1 年前 |