很多软件,只能打开一次,就像金山词霸一样,在《金山词霸》已经运行了的情况下,再次点击《金山词霸》的图标,那么它不会再运行另外一个《金山词霸》,而是将已有的《金山词霸》给激活,始终只能运行一个《金山词霸》的实例。 
我想请教java如何具体实现这样的功能,麻烦各位大侠详细指教下,小弟初学java。

解决方案 »

  1.   

    public class A{
    private static A _instance = null;
    public synchronized static A getInstance() 
    {
    if (_instance == null)
    {
    _instance = new A();
    }

    return _instance;
    }
    }
    使用A的对象时不用new,用A.getInstance();
      

  2.   

    楼上不对,这个是进程的问题,而不是线程,
    可以用绑定端口,FileLock对某个文件进行加锁,或者jni(windows的FindWindow)来检查是不是已经启动。
    好像1.4的Pref也可以(通过写入注册表某项值,这个我没有试过)。
      

  3.   

    这么写就可以了:import java.net.*;
    public class InstanceControl  extends Thread {
     public void run() {
      try{
       Socket client = new Socket("127.0.0.1", 22222);//创建socket,连接22222端口
       System.exit(0); //连接成功,说明有实例存在,则退出
      }catch (Exception e){ }  try{
       ServerSocket server = new ServerSocket(22222);//创建socket,连接22222端口
       while (true)
       {
        server.accept(); //接受连接请求
       }
      }catch (Exception e)
      {
       e.printStackTrace();
      }
     }
    }import javax.swing.*;public class ProgramMain{
     public static void main(String argv[])
     {
      InstanceControl ic = new InstanceControl();
      ic.start(); 
      JFrame frame = new JFrame("只能运行一个");
      frame.setVisible(true);
     }
    }上面只是个例子,如果真是用JFrame,记得在窗口退出事件中写System.exit(0)