检查桌面应用程序是否已在运行

时间:2013-06-28 11:36:26

标签: java singleton desktop-application

我正在研究基于java的桌面应用程序。一个要求是,如果应用程序正在运行并且用户尝试再次启动应用程序,则应该执行诸如显示某些警报等内容。

我使用了文件,当用户运行应用程序时,它会将一些文本添加到文件中并将其保存在本地系统的某个位置,当用户再次尝试运行应用程序时,我会检查文件并相应地处理情况,但是这是一个问题,如果应用程序异常终止,我无法删除该文件,在这种情况下,当用户尝试运行应用程序系统时,显示应用程序已在运行但实际应用程序异常终止的警报。

我做了一些R& D,发现我可以阅读Windows任务管理器列表然后我可以检查我的应用程序是否正在运行。它工作正常,但在测试过程中我遇到了一个问题i-e在Windows中有一个名为“tasklist”的软件/实用工具转到“开始 - >运行”并输入任务列表它将显示任务列表。如果您的系统上未安装此实用程序或由于某种原因删除/损坏此实用程序,则此操作无效,并且用户可以多次启动应用程序时出现同样的问题。以下是访问taskmanager项目的代码

Process p = Runtime.getRuntime().exec(
                System.getenv("windir") + "/system32/" + "tasklist.exe");

BufferedReader input = new BufferedReader(new InputStreamReader(
                p.getInputStream()));
while ((line = input.readLine()) != null) {
/*
Make the comparison here and show alert.
*/

}

问题:检查应用是否已在运行的好方法是什么?我正在使用Java进行应用程序,使用高级安装程序来创建应用程序的安装程序。

2 个答案:

答案 0 :(得分:5)

启动应用。使用Java Web Start并使用SingleInstanceService。有关(演示和。)示例代码,请参阅demo. of the SingleInstanceService

  

正在使用..高级安装程序来创建安装程序

请注意JWS:

  1. 也是应用程序安装程序。因此,我建议使用“高级安装程序”将此路由作为替代
  2. 由Java(Sun / Oracle)的制造商提供。

答案 1 :(得分:1)

结帐http://ss64.com/nt/wmic.html 并尝试

String line;
try {
    Process proc = Runtime.getRuntime().exec("wmic.exe");
    BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
    OutputStreamWriter oStream = new OutputStreamWriter(proc.getOutputStream());
    oStream .write("process where name='THE NAME OF YOUR PROCESS.exe'");
    oStream .flush();
    oStream .close();
    while ((line = input.readLine()) != null) {
        System.out.println(line);
    }: 
    input.close();
} catch (IOException ioe) {
    ioe.printStackTrace();
}

提供者:How to detect via Java whether a particular process is running under Windows?