Java桌面程序多次被打开时显示已运行的程序的窗口
2012-04-01 17:17
337 查看
在“单例”的例子的基础下,自己经过多次的测试和查找API,对Swing的API也不是很熟悉,有些想要的方法没找到,网上也没查找到资料,就简单的实现了这么一个小功能,只是性能的问题暂时不在考虑范围。可根据实际情况优化。
单例控制类:
测试类:
单例控制类:
import java.net.ServerSocket; import java.net.Socket; import javax.swing.JFrame; /** * @author WangW * */ public class InstanceControl implements Runnable { private JFrame frame; public InstanceControl(JFrame frame) { this.frame = frame; } /** * 原理:先申请连接,如果不成功,则创建一个服务端,程序就创建了一个示例。 * 下次再运行的时候,又连接,如果连接上了,则证明已经创建了此端口的一个服务, * 证明有实例存在,就退出。同时已创建的服务如果接受到了连接,则可做一些事情。 */ public void run() { try { new Socket("127.0.0.1", 12333);// 创建socket,连接12333端口 System.exit(0); // 连接成功,说明有实例存在,则退出 } catch (Exception e) { } try { ServerSocket server = new ServerSocket(12333);// 创建socket,连接12333端口 while (true) { Socket socket = server.accept(); // 接受连接请求 if (null != socket) { if (frame.isVisible()) { frame.setExtendedState(JFrame.NORMAL); if (!frame.isFocused()) { frame.setAlwaysOnTop(true); frame.setAlwaysOnTop(false); } } else { frame.setVisible(true); } } } } catch (Exception e) { e.printStackTrace(); } } }
测试类:
import javax.swing.JFrame; /** * @author WangW * */ public class MainSingle extends JFrame{ private static final long serialVersionUID = 7298654510352964995L; public MainSingle() { setTitle("Single"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(200, 100); } public static void main(String[] args) { MainSingle frame = new MainSingle(); InstanceControl ic = new InstanceControl(frame); Thread t = new Thread(ic); t.start(); frame.setVisible(true); } }
相关文章推荐
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- C# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- 第一个Java程序,简单的打开图片并显示在面板上
- java获取程序运行时RT打开qq
- 在SuSE Linux下运行 Java 程序显示乱码
- 用eclipse运行java程序显示找不到main class,网上的方法都试了,还是不行,有没有知道怎么解决的呀!
- 打开文件时窗口显示在桌面以外的区域
- C#检测同个程序被打开或运行多次
- eclipse 编的java程序运行后显示问号
- eclipse 编辑窗口不见了(打开左边的java、xml文件,中间不会显示代码)
- eclipse,多个java程序同时运行,用不同的console显示运行信息的方法。
- Dos(cmd)窗口下运行 JAVA程序(文件复制)
- c# 程序只能运行一次(多次运行只能打开同一个程序)
- 黑窗口运行java程序