我有一个摆动计时器,该计时器每30秒运行一次,它调用一种方法,在该方法中搜索从列表中获取的一些特定应用程序的PID。

这是所调用方法中的代码。

try {
    Runtime r = Runtime.getRuntime();
    Process p = r.exec("tasklist");

    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String inputLine = "";

    while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
        for (int i = 0; i < runningAppList.size(); i++) {
            if (inputLine.contains(runningAppList.get(i).getExecutableName())) {
                appPIDNumber = inputLine.substring(28, 35).trim();
                break;
            } else {
                appPIDNumber = "";
            }
        }
    }

    in.close();
} catch (IOException e) {
    LoggingUtils.LogExceptions(LoggingConstants.ERROR, e.toString());
}


因此,如果我的应用程序正在运行并且我启动了该应用程序,我将获得PID,但是当我关闭该应用程序时,它仍然显示PID,并且不会将其清除为“”;我知道我缺少一些小东西。

谢谢。

最佳答案

我认为是因为runningAppList。如果应用程序关闭,则该列表可能为空,因此将不执行“ while”循环,并且变量appPIDNumber不会设置为空。

第二种选择是,在关闭应用程序后,r.exec("tasklist")不包含任何行。

无论如何,似乎您必须在循环之前将appPIDNumber设置为空。

09-12 09:40