【问题标题】:Window closing and single instance of JFrame窗口关闭和 JFrame 的单个实例
【发布时间】:2014-03-31 17:14:26
【问题描述】:

2+1 题:

  1. 我有一个独立的应用程序并为它创建了一个可运行的 jar。现在,当我双击它时,会打开一个JFrame 窗口,我需要登录。问题是如果我双击它可以打开多个 JFrame 窗口。我需要的是,一旦我登录后,无论何时我尝试再次打开它,它都应该向我显示当前登录的窗口。或者这样说,创建该JFrame 窗口的单个实例。

  2. 关闭窗口时,需要在关闭前做一些操作。我知道我可以使用WindowListener,但这在我关闭 JFrame 时不起作用(如终止应用程序)。有没有办法在手动终止之前执行任何操作?

编辑:另一个问题:

  1. 我做了一个setExtendedState(JFrame.ICONIFIED);,用于在单击“x”(关闭)时最小化JFrame 窗口。它最小化但从任务栏中消失。有没有办法像正常最小化一样保持在任务栏中?

【问题讨论】:

  • 对于您的第三个问题,请查看 here,因为图标化状态会在任务栏 C 上显示一个图标:同时查看 this other link
  • 单击“x”时没有看到任何图标。它最小化但从任务栏中消失。该应用程序仍将运行。
  • 你试过点击时钟旁边的小箭头吗?也许它在哪里

标签: java swing


【解决方案1】:

1)

让您的 main 方法搜索程序的另一个实例。如果找到,则聚焦该窗口并让它自行关闭。您可以在此处阅读类似问题的更多信息:Question

2)

使用关闭挂钩:

Runtime.getRuntime().addShutdownHook(new Thread() {

    @Override
    public void run() {...} //your code to run when closing the program

}

【讨论】:

  • 谢谢。这就是我一直在寻找的! ShutDownHook。并感谢您的链接。会看的!
  • 对于 1) 它使用链接中给出的代码。当我说没有打开新窗口时起作用。但是,我将如何让已经打开的窗口成为焦点。我可以获取 processid/processname 但我可以用它来做吗?
  • 嗯,不完全确定。我想你可能会对套接字之类的东西感到棘手,但这种跨进程通信对于 Java 开始变得棘手。
  • 嗯我试过addShutdownHook,当我尝试从eclipse终止时,它没有运行!还有什么事情要做吗?
  • kill -9 或强制关闭程序不会运行关闭挂钩,我想 eclipse 的环境可能会这样做。您应该尝试将其与 IDE 分开运行
猜你喜欢
  • 1970-01-01
  • 2015-06-24
  • 2012-11-05
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
相关资源
最近更新 更多