您是否尝试过使用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