我开发了一个swing应用程序,但每次运行应用程序时都会打开新窗口。 我想,如果一个窗口已经打开,其他不允许打开。只有一个摆动框架窗口在时间打开
5
A
回答
17
Here是Java的单应用程序实例的例子:
单个实例应用程序是一种只允许到无论用户尝试多少次启动运行的应用程序1。
该应用程序尝试打开特定端口上的套接字。如果您的应用程序的另一个实例已在运行,则打开套接字将失败。
这对您已经足够了,因此您不必使用用于将新应用程序注册到第一个应用程序的代码部分。
与将某种标志写入文件系统/注册表/任何内容相比,使用套接字有一个很大的优势:
即使应用程序崩溃,它也会被删除。
1
它实际上听起来像你只想要一个应用程序一次打开。在这种情况下,为什么不在应用程序运行时取出文件锁定或类似内容,并检查启动时是否启动。当你的程序没有完全退出时,头痛(当然)会清除锁定。
1
正如Peter Lang所链接的,我的首选解决方案是使用套接字。当您的应用程序启动时,您可以启动服务器套接字监听localhost上的传入连接(以及您选择的端口)。在代码中发生这种情况之前,您可以尝试连接到服务器套接字,如果成功,您知道还有另一个实例已经打开,因此您可以使用适当的消息退出当前实例。
在您的服务器套接字实现中,您还可以添加在接收传入连接时实际强制应用程序的当前实例到前台的功能。
0
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();
}
}
0
你的意思是运行像一个单身的GUI?我已经在过去通过使静态私有“视图管理器”,使其为空,而不是创建或可见第一次GUI直到做到了这一点在创建之后,就像使用经典单例一样,当应用程序再次运行时,GUI被设置为可见的......我有几个框架遵循此设计 - 在这些框架中,GUI不是“主要”也是命令行和类似的接口,所以通过命令行召唤GUI ...
0
使用单数模式,如example所示!
相关问题
- 1. 如何在摆动上打开窗口
- 2. javascript - 在新窗口中打开框架
- 3. 在当前窗口的中心打开一个框架
- 4. 在目标框架中打开一个窗口
- 5. 在同一个窗口中打开框架内的链接
- 6. WPF中只能打开一个窗口?
- 7. 摇摆:关闭一个框架,并在同一时刻打开另一个
- 8. Eclipse未打开框架窗口
- 9. HTML框架:框架集在新标签页/窗口中打开
- 10. 打开一个框不是新窗口
- 11. 为什么窗口打开有时会打开一个新选项卡,有时会弹出一个窗口?
- 12. 如何在只有一个窗口中打开HTML /标签
- 13. jquery打开窗口,但只有当窗口未打开时;然后在其他窗口前显示它?
- 14. Kendo UI:当打开一个窗口时,我想替换一个窗口,但不打开一个新窗口
- 15. 当只有一个人应该打开两个窗口
- 16. 一个页面只能在一个窗口中打开
- 17. 在同一时间打开多个窗口,popupWindow和新标签
- 18. 使用javascript在同一时间打开多个窗口
- 19. 跟踪在Java中打开一个窗口的时间长度
- 20. 链接将在2个框架内打开新窗口
- 21. 打开一个子窗口
- 22. 打开一个新窗口
- 23. 打开一个EXE窗口
- 24. cscript.exe打开一个窗口
- 25. 有一个弹出窗口打开后
- 26. 如何在打开新框架时关闭前一个框架
- 27. 只允许打开一次窗口
- 28. WPF - C# - 只打开父窗口一次
- 29. 只需打开没有黑色终端窗口的Cygwin Emacs框架
- 30. Javascript打开一个窗口打开窗口
使用套接字似乎是一个非常有用的想法 - 比我提到的文件锁更可靠。 – 2010-03-27 12:31:28
感谢您回复 您给出的解决方案非常完美。 – chetan 2010-03-29 13:31:55
但是使用哪个端口号?就我个人而言,我会在运行时分配一个端口,并且在临时目录中写入一个小文件以保存所选端口号似乎是不可避免的。 – 2011-11-22 08:13:19