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

如何检查JDialog是否已经在Java中打开?,java,jdialog,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(ne

我目前正在开发一个数字时钟小部件。我使用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()
,但我不知道如何解决这个问题。我也试过这个,


请问有人能帮我吗?提前感谢。

没有一种特别干净的方法可以做到这一点。如果您能够使用Java 9,则可以使用新的process API获取所有进程的列表,并搜索与您的程序匹配的进程,否则您将需要依赖于平台的行为


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

FYI,我认为其他问题的答案对您没有帮助:它们处理的是来自同一应用程序(即,在同一JVM中运行)的窗口-您的问题是检测在不同实例中创建的窗口。请求焦点是操作系统的事情,应用程序的两个实例不会像您那样共享您在代码中创建的实例,例如,您需要从第一个应用程序中写入一个文件作为锁,并在第二次运行时检查锁,并显示一条消息,而不是创建一个屏幕。@MarcosVasconcelos先生,我该怎么做?写一个锁文件?你能给我看一些代码片段吗?写一个文件,检查它是否存在like@MarcosVasconcelos好的,先生,我会试试。我会试试这个文件锁方法,先生。