我用java Swing 做了一个工具,
但我做的只允许启动一个实例,
所以当已经有一个实例已经启动再去启动就不能再启动.
我做了一个后台,可以隐藏启动,
我现在是想,
如果系统自动启动了一个后台实例,
用户再去启动不是后台的EXE时,就把后台的实例显示出来. 不知道各位高手有什么好的办法,
怎么实现有代码或示例.
但我做的只允许启动一个实例,
所以当已经有一个实例已经启动再去启动就不能再启动.
我做了一个后台,可以隐藏启动,
我现在是想,
如果系统自动启动了一个后台实例,
用户再去启动不是后台的EXE时,就把后台的实例显示出来. 不知道各位高手有什么好的办法,
怎么实现有代码或示例.
虚拟机中的线程都处于线程组ThreadGroup中,可以包含子线程组
你用Thread.currentThread().getThreadGroup().getParent()
得到当前线程,然后得到父线程,若父线程==null,即为根线程
遍历线程组,若有thread.getName()等于你的那个应用程序,就说明已经运行了一个
不如最小化到系统托盘
不过需要高版本的jdk支持
5还是6忘记了
弄个单例模式不行么?
供参考
其实我的第一感觉也是系统托盘
其實不知是我沒表達明白還是大家不知道所雲,我的問題是:
如果系统自动启动了一个后台实例,
用户再去启动不是后台的EXE时,就把后台的实例显示出来. 問題在於,當你啟動一主程序的時候它們的實例都是不同的,
所以我用了java RMI 來勉強實現的把已經啟動的隱藏程序呼出的功能.
線程的方式還沒試不知道是否可以實現.
對於這個辦法,應該不可以實現,因為每次啟動程序時虛擬機都是新加載類的,也就是連線程的class對像都是不同的實例,連靜態變量都是重新實例化的,Thread.class都是新實例的好像,呵呵
所以用線程通信的方法應該無法實現,現在實現還算好的就是javaRMI了,不過要用到端口及註冊服務,這樣比較麻煩,我還發現有出理錯誤的情況.