![]() |
1
1
这是未能遵守Swing EDT规则。 SwingWorker的目的是在发生会阻塞UI的UI事件时执行大量非UI任务,然后在结束时更新UI。 因此,您可以在doinbackground()内实现举重;完成后,Swing将在EDT上调用Done(),并且可以使用get()检索结果。 这里的问题是,您正在使用新的线程swingworker创建的GUI工作。这可能导致死锁和并发问题。 这包括创建所说的GUI对象,这些对象应该是可运行的,即使您已经在EDT上了。 行动,如:
应该用invokeAndWait封装在可运行文件中。实际上修改图形用户界面本身的东西,尤其需要在自己的可运行文件中, 即使 如果您已经在Swing事件分派线程中响应按钮按下或更改,那么您将面临处理已经处理的对象的风险。 例如,Swing正在工作并锁定a以允许您工作,让您在b上工作尝试锁定并在a上工作 |