Java Swing中出现死锁,不确定如何继续
在Java Swing应用程序中,单击按钮时会调用以下代码:Java Swing中出现死锁,不确定如何继续,java,multithreading,swing,swingworker,Java,Multithreading,Swing,Swingworker,在Java Swing应用程序中,单击按钮时会调用以下代码: class MyWorker extends SwingWorker<String, Object> { @Override protected String doInBackground() throws Exception { loadMasterFile(); judgeFileListModel = new DefaultListModel(); /
class MyWorker extends SwingWorker<String, Object> {
@Override
protected String doInBackground() throws Exception {
loadMasterFile();
judgeFileListModel = new DefaultListModel();
// Refresh model
return "Done.";
}
@Override
protected void done() {
LB.setVisible(false);
}
}
new MyWorker().execute();
在调用的代码中,我打开了一个JFileChooser。它第一次运行时非常好-如果在代码完成后再次按下按钮,它将挂起。如果我随后调试并暂停,当这种情况发生时,我似乎有一个死锁
我不知道如何处理这件事——还是个学生
如果可能的话,我非常想得到一些帮助
编辑:
我已经修好了
对于任何有类似问题的人-这是由于JFileChooser在loadMasterFile方法中。在doInBackground中包含任何GUI代码显然违反了swing规则,因此我对其进行了重构,效果很好。我们不知道loadMasterFile中发生了什么,但它不返回任何内容,可能不是线程安全的。@his我可以通过让它返回一个值来实现线程安全吗?我可以让它返回真实的完成或什么?对不起,我想我在这里有点匆忙。如果该方法是在MyWorker本身中定义的,那么这并不是我假设的强烈暗示。不过,您似乎访问了似乎在别处的对象LB,顺便说一句,这是一个错误的变量名。如果您在loadMasterFile中这样做,这也可能是问题的一部分。您需要向我们显示失败的特定调用的更多上下文。@他的“我有一个密码对话框”要求输入密码-无论我选择“取消”还是“确定”,它都会继续,并且不会显示JFileChooser。我用showOpenDialognull调用它,而不是这个-如果它difference@his我还应该提到,在JFileChooser之后询问密码之前,现在是在单击之前,根本不起作用。