我有一个每30秒运行一次的swing计时器,它调用了一种方法,我可以从列表中搜索一些特定应用程序的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并且不会将其清除回“”;我知道我错过了一些小事。
感谢。
答案 0 :(得分:1)
我认为这是因为runningAppList
。如果应用程序已关闭,则该列表可能为空,因此不会执行“while”循环,并且变量appPIDNumber
将不会设置为空。
第二个选项是,应用程序关闭后r.exec("tasklist")
不包含任何行。
无论如何,您似乎必须在“while”循环之前将appPIDNumber
设置为空。