我用java Swing 做了一个工具, 
但我做的只允许启动一个实例, 
所以当已经有一个实例已经启动再去启动就不能再启动. 
我做了一个后台,可以隐藏启动, 
我现在是想, 
如果系统自动启动了一个后台实例, 
用户再去启动不是后台的EXE时,就把后台的实例显示出来. 不知道各位高手有什么好的办法, 
怎么实现有代码或示例.

解决方案 »

  1.   

    我想可以用线程来做,
    虚拟机中的线程都处于线程组ThreadGroup中,可以包含子线程组
    你用Thread.currentThread().getThreadGroup().getParent()
    得到当前线程,然后得到父线程,若父线程==null,即为根线程
    遍历线程组,若有thread.getName()等于你的那个应用程序,就说明已经运行了一个
      

  2.   

    exe?Process检查下是否有同名的exe在,有则显示它,无则启动它。 
      

  3.   

    感觉隐藏启动没有必要
    不如最小化到系统托盘
    不过需要高版本的jdk支持
    5还是6忘记了
    弄个单例模式不行么?
    供参考
      

  4.   

    Singleton??
    其实我的第一感觉也是系统托盘
      

  5.   

    我試過最後得到的值都是"system"
      

  6.   

    很久前搞定了的,但都沒時間上來看,但都沒看到有更好的辦法,傳說這裡高手很多的,怎麼都沒什麼更好的辦法了.
    其實不知是我沒表達明白還是大家不知道所雲,我的問題是:
    如果系统自动启动了一个后台实例,  
    用户再去启动不是后台的EXE时,就把后台的实例显示出来.  問題在於,當你啟動一主程序的時候它們的實例都是不同的,
    所以我用了java RMI 來勉強實現的把已經啟動的隱藏程序呼出的功能.
    線程的方式還沒試不知道是否可以實現.
      

  7.   

    在你获取程序实例的代码里面加一个count count是奇数的时候隐藏 是偶数的时候显示
      

  8.   


    對於這個辦法,應該不可以實現,因為每次啟動程序時虛擬機都是新加載類的,也就是連線程的class對像都是不同的實例,連靜態變量都是重新實例化的,Thread.class都是新實例的好像,呵呵
    所以用線程通信的方法應該無法實現,現在實現還算好的就是javaRMI了,不過要用到端口及註冊服務,這樣比較麻煩,我還發現有出理錯誤的情況.