这是我以前写的一篇blog,相信对你会有所帮助.
http://www.shineblog.com/blog/more.asp?name=rainbow&id=12819

解决方案 »

  1.   

    这个简单
    枚举进程看是否有java.exe或javaw.exe
      

  2.   

    锁文件去吧 :P java.io.File.createNewFile() 和 deleteOnExit()
      

  3.   

    对hiswing() 说:
    利用Socket我阤想过,但觉得不是很合理,能不能有更好的办法?
    对crow_soup() 说:
    锁文件的话,如果当程序异常退出的话,锁文件就没有用了吗?对yuanweihong说:
    我没太明白你的意思。
      

  4.   

    java.io.File.deleteOnExit() 指的是在VM退出的时候删除文件,是在整个虚拟机退出的时候cleanup的阶段干的事情,如果Java程序有什么三长两短,虚拟机退出的时候一样会删掉文件,如果你担心VM当掉我就没办法了,windows当掉还自检硬盘呢
      

  5.   

    我认为Socket,是不合理的。因为,SocketServer通过指定的端口是否打开来判断程序是否已经运行。而我的程序的端口是任意产生的,也就是说,我不知道我打开了哪个端口,我总不能从头到尾地检查一下端口吧。另外,我的程序是允许重复打开的,但是,每次打开的端口是任意的,再就是,如果让一个与Socket无关的程序,非要引入一个Socket包,未免有点牵强了吧。对crow_soup() 说:能给一个写文件的例子吗?我觉得这个还比Socket合理。还有人让我用Runtime。
      

  6.   

    我记得有网上有一个实例,是如何一个java程序只有一个实例运行,记不清了。你上网找找
      

  7.   

    这个帖子居然这么长时间都没有结,
    写吧:import java.io.File;
    import java.io.IOException;public class Test {
        // 选个TMD变态点的文件名
        private static String fileName = "C:\\xxxlock";
        public static void main(String[] args){
            File lockFile = new File(fileName);
            try{
                if(!lockFile.createNewFile()){
                    System.out.println("Lock file already exists!");
                    return;
                }
            } catch(IOException e){
                e.printStackTrace();
                return;
            }
            lockFile.deleteOnExit();        System.out.println("Run something");
            try{
                Thread.sleep(50000);
            } catch (InterruptedException e){
            }
        }
    };