只有一个swing框架窗口在时间打开

我开发了一个swing应用程序,但每次运行应用程序时都会打开新窗口。 我希望如果一个窗口已经打开,其他窗口不允许打开。

以下是Java单一应用程序实例的示例:

单实例应用程序是一个仅允许应用程序中的一个运行的应用程序,无论用户尝试启动多少次。

应用程序尝试在特定端口上打开Socket。 如果您的应用程序的另一个实例已在运行,则打开Socket失败。

这应该已经足够了,因此您不必使用用于将新应用程序注册到第一个应用程序的代码部分。

与将一些标志写入文件系统/注册表/其他方面相比,使用Socket有一个很大的优势:
即使您的应用程序崩溃,它也会被删除。

实际上听起来你只想要一次打开一个应用程序 。 在这种情况下,为什么不在应用程序运行时取出文件锁或类似文件,并在启动时检查它。 令人头疼(当然)是在您的程序没有干净地退出的情况下清除锁定。

正如Peter Lang所说,我首选的解决方案是使用套接字。 当您的应用程序启动时,您可以启动服务器套接字,侦听localhost上的传入连接(以及您选择的端口)。 在您的代码中发生这种情况之前,您可以尝试建立与服务器套接字的连接,如果成功,您就会知道已经打开了另一个实例,因此您可以使用适当的消息退出当前实例。

在您的服务器套接字实现中,您还可以添加在接收传入连接时实际强制应用程序的当前实例到前台的function。

你的意思是像单身人士一样运行GUI吗?我过去通过制作一个静态私有“视图管理器”来做到这一点,这样它就是空的,直到第一次创建gui时才创建或可见,之后就像使用经典的单例,当应用程序再次运行时,GUI设置为可见…我有几个遵循此设计的框架 – 在这些框架中,GUI不是“主要”,还有命令行等接口,以便通过命令行传唤GUI …

public class Samp { JFrame f=new JFrame(); File ff=new File("D:\\a.txt"); FileWriter fw; public Samp() { f.setBounds(0, 0, 200, 200); try { Scanner sc=new Scanner(ff); if(!sc.hasNext()) { fw=new FileWriter(ff); fw.write("Running"); fw.close(); } else { System.exit(0); } } catch(Exception e) { System.out.println(e.getMessage()); } WindowListener wndCloser = new WindowAdapter() { public void windowClosing(WindowEvent e) { try { Scanner sc = new Scanner(ff); if(sc.hasNext()) { fw=new FileWriter(ff); fw.write(""); fw.close(); } } catch (Exception ex) { } } }; f.setVisible(true); f.addWindowListener(wndCloser); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String args[]) { new Samp(); } } 

使用Singletone Pattern,如示例所示!