2

我有一个框架问题,我想在手术后重新启动。具体来说,在以下开头Frame

public static void startHome() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frame = new HomeGUI();
                frame.setVisible(true); 
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

框架下方:

public HomeGUI() throws IOException, InstantiationException, IllegalAccessException {
        setIconImage(Toolkit.getDefaultToolkit().getImage(ico_path));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 669, 516);
// etc...

在我的实际重启代码下方,但不起作用:

frame.dispose();
startHome();

在进入run()方法之前处理停止。我尝试设置frame = nullbeforeinvokeLater和 after dispose(),但不起作用。

谢谢你们

4

1 回答 1

1
  1. 有两种方法(无意重新启动)(重新)使用

    • setIconImage()

    • CardLayout

  2. 确定setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);终止当前的 JVM

  3. 正确LayoutManagerJComponent(s) 必须返回PreferredSizeJFrame,然后调用

    • JFrame.pack()
    • JFrame.setLocation()
    • JFrame.setVisisble(true)
    • 作为构造函数中的最后一行代码
    • 因为我找不到任何使用 AbsoluteLayour 的理由,例如setBounds(100, 100, 669, 516);
  4. dispose()setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);与 相同setVisible(false),您可以Top-Level Containers通过迭代数组从当前 JVM中获取所有内容Window[] wins = Window.getWindows();

于 2013-07-24T13:24:04.437 回答