处理后重新启动JFrame

时间:2013-07-24 12:41:32

标签: java swing frame dispose restart

我在操作后想要重启的Frame有问题。 具体而言,低于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 = null之前和invokeLater之后设置dispose(),但不起作用。

谢谢大家

1 个答案:

答案 0 :(得分:1)

  1. 有两种方式(没有任何意图重新启动)到(重新)使用

    • setIconImage()

    • CardLayout

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

  3. 正确LayoutManagerJComponent(s)必须将PreferredSize返回JFrame,然后致电

    • 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(); / p>