我写了一个程序,为了防止在一台机器上同时打开两个该程序,我使用了锁文件的方法,奇怪的是文件锁不住,然后我又用锁端口的方法,但是也锁不住,我在另外的一个程序中使用相同的方法来锁文件,却没问题,文件能锁住。郁闷啊,为什么我的第一个程序锁不住文件或端口呢?谁遇到过这种情况?大家都来讨论讨论,我实在是想不出来原因了,快疯掉了

解决方案 »

  1.   

    NIO 文件锁 @J2SE4 .
      

  2.   

    锁文件一共九三五行代码,我在前后两个程序中使用的锁文件的代码一模一样,而且都是在static main()函数中,都是在最前面。这个问题肯定是代码问题,我不回去怀疑计算机,但是我实在找不到哪里出现问题了,我跟踪了一下,第一个程序是先锁住文件了,但是很快文件被解锁了。真实太奇怪了,是什么东西使我的文件锁实效的呢?我的代码中没有解锁阿,调试的时候是在执行完frame.setVisiable(true);后就解锁了,我在前面添加或注释掉一些代码后(随便添加或注释),文件解锁的位置也改变了,不是在frame.setVisiable(true);这里解锁了。由于程序太大,太复杂,也没法贴上来给大家试试,只能是让大家帮忙想想思路了。谢谢前面几位!
      

  3.   

    我怀疑你是不是认为frame.setVisiable(true)会等到窗口被关闭才调用结束,运行到下一行?所以你的代码是不是这样?加锁
    frame.setVisiable(true)
    解锁这是错误的,这句执行完,窗口显示出来之后,方法调用马上会返回,而不会阻塞,因为窗口是运行在awt dispatch thread之内的,你的main方法运行在main thread内
    把解锁放到frame的窗口关闭事件内执行