如题,因开发需要实现该功能,还请高手多指点一二。

解决方案 »

  1.   

    singleton patternClass MyClass{ private static MyClass instace;
     private MyClass(){ }
     public static MyClass getInstance(){
       if(instance==null)
         instance= new MyClass();
       return instance;
     }
    }
      

  2.   

    谢谢,我已经用了单态模式 代码如下,
    public class MainWnd {
             private static MainWnd mainWnd=new MainWnd();
    private MainWnd(){
                  ......
    }
    public static MainWnd getInstance(){
    return mainWnd;
    }
    }调用的代码:
    public class Run1 {
    public static void main(String[] args) {
    MainWnd main1=MainWnd.getInstance();
    }}public class Run2 {
    public static void main(String[] args) {
    MainWnd main2=MainWnd.getInstance();
    }}
    执行Run1、Run2后,系统还是会弹出两个应用程序的窗口,请问怎么才能只允许一个窗口弹出呢?(vb中好像是查看是否有进程执行,不知道java中该怎么实现阿?)
      

  3.   

    执行run1时打开一个端口,执行run2检测端口是否打开,通过端口占用来判断
      

  4.   

    两个main,是在两个classloader中,当然有两个窗口.
    单态模式是指的在一个jvm中
      

  5.   

    to 
    lcllcl987(毛爷爷)  那请问要怎么才能实现这个效果?to killme2008(为了生态平衡,请保护蛤蟆) 你说要打开一个端口,能说得具体点吗?
      

  6.   

    没一个正确的
    socketserver sc=new socketserver(port);
    下次启动的时候检测port是否占用锁文件 全局可访问的资源都不可以
      

  7.   

    在我看来,搂主加载这两个类的时候,系统启动两个jvm实例,实际上是两个内存空间,通过单例模式得到的对象实际在两个jvm实例堆中都存在,也就是说,虽然单例模式,但是由于不在同一个jvm实例中,还是会存在两个实例。不管采用什么方式,都涉及jvm之间通信问题,由于应用层都不能确信对方已经加载,可能的方式就是通过在第三方注册自己或者持有第三方资源锁,另一个jvm实例加载的时候才能知道是否对方知道,才可以决定是否加载类。通过对端口的占用判断确实是个比较好的办法,端口应该也算是系统共享的资源吧,一旦一个jvm实例占用这个端口,另一个jvm加载时就可以检测到资源被占用。
      

  8.   

    用FileLock也行.原理如同阁层楼上.
      

  9.   

    Sprite_bei:没一个正确的
    socketserver sc=new socketserver(port);
    下次启动的时候检测port是否占用锁文件 全局可访问的资源都不可以
    ======================================================================================
    为什么不能使用锁文件?许多程序都是用锁文件啊,visual age for java, netbeans, eclipse都是使用锁文件。
      

  10.   

    呵呵,看不出更高明的地方。难道port不是全局可访问的资源,何况如果网络没有配置,方法会抛出Exception(我是这样猜想,虽然TCP/IP几乎是标准,但并不排除没有socket的可能)
      

  11.   

    基本思路是在程序目录下放一个空文件,程序启动的时候就取得该文件的文件锁,能取到就继续运行,取不到就退出,用单实例是没用的,没起一个程序都启了一个JVM,单实例只对同一JVM内的有效
      

  12.   

    楼主可以看一下这个帖子:)http://community.csdn.net/Expert/topic/5370/5370302.xml?temp=.2584192希望对你有所帮助!