【问题标题】:Restart a JFrame after dispose处理后重新启动 JFrame
【发布时间】:2013-07-24 12:41:32
【问题描述】:

我有一个框架问题,我想在手术后重新启动。 具体来说,下面是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() 方法之前停止。 我尝试在invokeLater 之前和dispose() 之后设置frame = null,但不起作用。

谢谢大家

【问题讨论】:

  • 您的 HomeGUI 类必须扩展 JFrame。你能提供你的 HomeGUI 类的代码吗?
  • 当你调用dispose方法时,你可能看到Frame被关闭了.. dispose关闭了frame并停止线程的进程(run方法),所以对象上没有任何东西持有 Frame(如果你写了 Frame1 f = new Frame1(),那么 f 就是垃圾).. 你必须在 dispose 之后创建一个新实例
  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 见The Use of Multiple JFrames, Good/Bad Practice?

标签: java swing frame dispose restart


【解决方案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)相同,可以通过迭代Window[] wins = Window.getWindows();的数组从当前JVM获取所有Top-Level Containers

【讨论】:

  • 我不明白要对我的代码应用的有效更改... 第 2 点:它已被使用;第 3 点:我必须在哪里插入这些行?第4点:我不明白...
  • “重启”的真正原因是什么。到Point 3: where I must insert this lines? ---> 创建所有GUI 后的最后一行代码,Point 4: I don't understand see my comment 跟随我对Elior Top-Level Containers never will be GC'ed 的评论中的链接
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多