您是否嘗試過使用ApplicationManager來處理這個問題?如果您有一個後臺系統進程監聽事件,那麼您的GUI進程甚至可能不運行(即,如果您執行了System.exit(0)
而不是後臺進程)。下面是一個代碼片段,你可以用它來尋找在GUI程序(基於其應用程序描述符),要麼把它帶到前臺(如果它運行),或啓動它(如果它不是):
// Check if app is already running
ApplicationDescriptor descriptor = [descriptor for your GUI entrypoint];
ApplicationManager appManager = ApplicationManager.getApplicationManager();
int pid = appManager.getProcessId(descriptor);
if (pid != -1) {
// App is running, bring it to the foreground
appManager.requestForeground(pid);
} else {
// App is not running, so launch it
try {
appManager.runApplication(descriptor);
} catch (ApplicationManagerException e) {
// Can't launch
}
}
要獲取應用程序描述符的GUI切入點,使用下面的方法:
- 獲取使用
CodeModuleManager.getModuleHandleForClass(MyApp.class)
- 獲取應用程序描述符列表使用
CodeModuleManager.getApplicationDescriptors(handle)
- 檢查每個DES標誌手柄模塊句柄直到你發現一個等於「0」。這意味着它不是系統/自動啓動/啓動時啓動描述符 - 可能是您的GUI入口點。
一個問題,gui入口點的描述符是什麼/哪裏? – FurtiveFelon 2010-07-08 19:19:57
我編輯了包含該信息的答案 – 2010-07-08 19:55:46