在Java7中从未调用invokeAndWait
我想将我的程序更新为Java7,但当我运行它时,它仍然被阻塞。我创建了一个具有在Java7中从未调用invokeAndWait,java,jvm,java-7,Java,Jvm,Java 7,我想将我的程序更新为Java7,但当我运行它时,它仍然被阻塞。我创建了一个具有SwingUtilities的UI。invokeAndWait: SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { createUI(MyManagerClass.getInstance()); } }); 但是,永远不会调用run。我
SwingUtilities的UI。invokeAndWait
:
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
createUI(MyManagerClass.getInstance());
}
});
但是,永远不会调用run
。我不明白为什么,因为Java6可以工作,如果我查看线程,就找不到死锁
所有代码:
public class MainGUI extends SingleFrameApplication {
protected void startup() {
final JPanel panel = new JPanel();
MyManagerClass.getInstance().setMainPanel(panel);
show(panel);
Worker.post(new Job() {
@Override
public Object run() {
initUI();
return null;
}
});
getMainView().getFrame().pack();
getMainView().getFrame().setResizable(false);
panel.repaint();
}
private void initUI(){
MyUIClass.init(MyManagerClass.getInstance());
}
}
public class MyUIClass {
public static void init(MyManagerClass class){
JPanel panel = class.getMainPanel();
panel.add(getComponent());
}
protected JComponent getComponent() {
if (panel == null) {
panel = new JPanel();
fillPanel();
}
return panel;
}
protected void fillPanel() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
createUI(MyManagerClass.getInstance());
}
});
} catch (InterruptedException e) {
log.error(e, e);
} catch (InvocationTargetException e) {
log.error(e, e);
}
}
}
您是否设置了断点来验证它是否真的没有执行?请确保您没有在事件调度线程上调用它。是的,我设置了断点,它不是“从不执行”运行方法,并且我检查我是否不在事件调度线程上。您能否围绕invokeAndWait调用发布多一点上下文?如果适用,请尝试invokeLater(..)。好的,谢谢,没有invokeAndWait就可以了。但是为什么它与Java6一起工作呢?