如何检查JDialog是否已在Java中打开?

时间:2018-09-04 16:34:36

标签: java jdialog

我目前正在开发一个数字时钟小部件。我已经使用 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?

请任何人可以帮助我吗?预先感谢。

1 个答案:

答案 0 :(得分:2)

没有特别干净的方法可以做到这一点。如果您可以使用Java 9,则可以使用新的流程API来获取ProcessHandle.allProcesses()的所有流程的列表,并搜索与您的程序匹配的流程,但是否则,您需要使用平台-依赖行为。

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