1

プログラムを 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);
        }
   }
}
4

0 に答える 0