プログラムを Java 7 に更新したいのですが、実行するとブロックされたままになります。私はUIを作成しますSwingUtilities.invokeAndWait
:
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
createUI(MyManagerClass.getInstance());
}
});
ただし、run
呼び出されることはありません。理由がわかりません。なぜなら、Java 6 で動作し、スレッドを見るとデッドロックが見つからないからです。
すべてのコード:
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);
}
}
}