http://www.bqlr.com/designpatterns/index.htm这里有讲,自己去看看吧。

解决方案 »

  1.   

    据我的理解,这个模式是在一个进程中,保证某个类只有一个实例.
    但现在的问题是在应用程序已经启动的前提下,如果再次执行该程序的话,不要启动新的进程,而要调用已启动的程序中的某个窗口。现在是我可以判断该程序(main class)是否已启动,但我想如果能取得已存在main class实例的引用,或者那个窗口实例的引用的话,就可以调用其相应的方法了。已存在实例的引用如何取得我不知道,请各位高手赐教。多谢。
      

  2.   

    你说的窗口应该是JFrame吧,你可以用一次实例话模式,也可以不这样,但每实例化这个窗口时就要判断一个静态类中的数据结构如哈希表中是否有这样的对象,如果有就直接拿来用,没有就实例化一个,在你继承JFrame的类里的构造函数里可以让那个数据结构加上自己的句柄,也就是把句柄保存起来统一管理,到时就可以取出来直接用了。
      

  3.   

    pentax,你好.你以前这么做过吗,好用吗.
    我试试吧.非常感谢!
      

  4.   

    public LinkAccountFrame()
      {
        try
        {
          jbInit();
          if(!AblUtil.frameHashTable.contains(this))
          {
            AblUtil.frameHashTable.put("LinkAccount",this);
          }
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
      }JFrame myFrame = (JFrame)AblUtil.frameHashTable.get("LinkAccount");
    if(myFrame == null)
       myFrame = new LinkAccountFrame();
    myFrame.show();
    void cancel()
      {
         System.gc();
         //System.out.println("退出");
         AblUtil.frameHashTable.remove(this);
         this.dispose();
      }参考一下,或许有用
    AblUtil是一个静态工具类,你也可以写几个方法对frameHashTable操作。
      

  5.   

    pentax()朋友,我现在的程序用的就单态设计模式,你的方法和单态设计模式
    的效果是一样的。
    我现在想达到:
    在应用程序已经启动的前提下,如果再次执行该程序的话,不要启动新的进程,而且还要调用已启动的程序中的某个窗口。
    我觉得单态设计模式达不到这个功能。
    主程序本身并没有窗体,只是启动后在状态栏中显示个图标,右击图标可以
    选择其中要用的窗口。还有其他方法吗?帮帮忙!谢谢!
      

  6.   

    你的意思好像是和java无关,只是在系统中只有一个这样的程序运行,而不是在程序中如果窗口已经存在就不要实例划了。
    我见别人用VC做过可以在系统内保持只有一个软件程序运行。但在Java里好像不太容易,否则JBuilder也不会可以开好多个了。
    我觉得这和Java虚拟机有关,好像一个进程 就起一个虚拟机吧(瞎猜)
    我不知道你是怎么把Java启动起来的,是不是用bat文件来启动的,也不知道在这里面能否控制在系统中只有一个进程。
    不至于用VC来启动吧。
    我所知道的也就是这么多了,我觉得这种控制必须要与操作系统通信,你可以找VC高手问一下,然后看看能不能用DLL(java本地库)来实现。
    只能说一声抱歉了。
      

  7.   

    这个问题我已经解决了.利用jni技术,写个dll,调用findwindows,找到存在的
    窗口,然后用showwindow就可以ok.
    谢谢各位的帮助。
    问题结贴。