如题,
用java做了一个桌面应用程序,如何做到只能运行一个实例。网上说用Socket去判断,但觉得不太好,请问大家有没有好的办法。
还有就是程序当运行时,在任务管理器中只能看到一个javaw.exe,有没有办法能够自己去指定在进程里的程序名字。
谢谢。

解决方案 »

  1.   

    用一个文本文件lock.txt,里面保存信息0
    如果启动了一个实例就将文件的信息改为1
    第2次启动的时候判断是否为0,=0就启动,=1就不启动退出程序之前要改为0不过程序异常终止就出现问题了
      

  2.   

    试试看把application本身做成单例模式比如你的主程序是Apppublic class App {
        private static App app = null;
        private App() {}
        public static App getInstance() {
            if (app == null) {
                app = new App();
            }
            return app;
        }    public static void main(String [] args) {
            App app = App.getInstance();
            ...
        }
    }
      

  3.   

    我以前遇到过,用的是察看配置文件!但缺点是如果突然断电,就失效了!你可以用dll的钩子来判断!
      

  4.   

    用进程的互斥源可以很好的解决这个问题,不知道java支不支持这个。
      

  5.   

    给大家一个C的例子,看Java能不能做相同的实现。
    HANDLE hMutex = CreateMutex ( NULL, false, "FanyuSingleProgram" ) ;
        HANDLE windowhandle;
        if (WaitForSingleObject(hMutex,0)==WAIT_TIMEOUT)
        {
          MessageBox(NULL,"你的程序已经启动","信息",MB_OK|MB_ICONINFORMATION);
          exit (0);
        }
      

  6.   

    在JAVA中想实现这个,只有自己先在电脑上设置一个标量,然后启动程序以后去改这个标量,哪果此时还想运行的话,就从这个标量中得到是否已经启动过这个程序了,
    这个缺点就是如果突然停电就没有办法了
    你可以为你的程序加一个挂钩程序,让它来处理你程序退出以后的事情