【问题标题】:How to check if JDialog is already opened in Java?如何检查 JDialog 是否已经在 J​​ava 中打开?
【发布时间】:2018-09-04 16:34:35
【问题描述】:

我目前正在开发一个数字时钟小部件。我使用 JPanel 表单 对其进行了设计,并将其添加到 JDialog。这是代码。

static JDialog jDialog = new JDialog();

public static void main(String[] args)
{
   jDialog.setUndecorated(true);
   jDialog.add(new QuickLauncher());
   jDialog.pack();
   jDialog.setBackground(new Color(0, 255, 0, 0));
   jDialog.setLocationRelativeTo(null);
   jDialog.setVisible(true);
 }

问题是当我运行这个程序两次时,它会打开两个窗口。所以我需要的是我只需要一个窗口来运行,如果我再次运行程序而不是再次运行程序,它需要关注应用程序。我尝试了各种示例和方法,例如isVisible()isActive(),但我不知道如何解决这个问题。我也试过了,

How to check if a jframe is opened?

请任何人都可以帮助我?提前致谢。

【问题讨论】:

  • 仅供参考,我认为其他问题的答案不会对您有所帮助:它们正在处理来自同一应用程序的窗口(即,在同一 JVM 中运行)-您的问题是关于检测在不同实例中创建的窗口。
  • 请求焦点是操作系统的事情,一个应用程序的两个实例不会像您那样共享您在代码中创建的实例,您需要例如从第一个应用程序编写一个文件作为锁,并且在第二次运行时检查锁定并显示一条消息而不是创建一个屏幕。
  • @MarcosVasconcelos 先生,我该怎么做?写一个锁文件?你能显示一些代码sn-p吗?
  • 写一个文件并检查它是否存在或类似的东西
  • @MarcosVasconcelos 好的,先生,我会试一试。

标签: java jdialog


【解决方案1】:

没有一种特别干净的方法可以做到这一点。如果您能够使用 Java 9,您可以使用新的进程 API 来获取带有 ProcessHandle.allProcesses() 的所有进程的列表并搜索与您的程序匹配的进程,否则您需要求助于平台相关的行为.

另一种方法(不需要 Java 9)是使用FileLock。您将在已知位置创建一个文件,然后将其锁定(参见上面的链接)。当JVM关闭时,锁将被释放。当您的程序启动时,您可以检查文件是否被锁定,以确定您的程序是否已经在运行。

【讨论】:

  • 我会试试这个 FileLock 方法先生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
相关资源
最近更新 更多