Process对象如何判断该进程已经结束? 创建了一个Process,在程序里想用一个Timer定时去监视一下该进程是否已经运行结束,该如何去判断?不能用Process.waitFor因为waitfor会引起阻塞,中间需要做别的事情。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Runtime runtime = Runtime.getRuntime(); Process process = null; try { process = runtime.exec("cmd /c Tasklist"); BufferedReader in = new BufferedReader(new InputStreamReader( process.getInputStream())); String s = ""; while ((s = in.readLine()) != null) { //看看有没有想要的进程 } } 如果process启动的程序也是你自己写的,那么就设置一个flag,程序即行结束时修改flag,timer就一直监视flag的值,如果程序不是你写的,那就像LZ说的,读取系统的任务list看看存在不存在你的进程(linux的话可以用ps -ef | grep来判断) process启动的程序是自己写的,我就是不知道process什么时候结束,除了用waitfor还有什么办法判断吗? 如果process启动的程序是自己写的,可以在程序中追加对文件的处理,比如程序执行时,新建一个临时文件(或者往某个文件写入记录),程序执行结束时,删除临时文件(或者删除某个文件的记录)。你的timer可以监视临时文件是否存在(或者监视某个文件中的记录)来判断程序是否执行结束 掉一个线程去监听 进程 的运行。 public class ProcessState extends Thread { public ProcessState(Process p) { process = p; } @Override public void run() { try { process.waitFor(); } catch (InterruptedException ex) { throw new RuntimeException(); } } public void startListen() { start(); } public boolean isExit() { switch (getState()) { case NEW: throw new RuntimeException(); case TERMINATED: return true; default: return false; } } private Process process; } process.waitFor();程序不是就阻塞了吗? 最后还是用runtime.exec("cmd /c Tasklist");来做了,但是现在运行的程序时间比较短都永远都是找不到的状态结贴了 关于jdo查询 applet转成java的JFrame窗体程序 有趣的问题,看哪位大虾能帮忙解决下 这个JTreet 怎么了? 存储过程如下:select * from tablename,求用JDBC代码调用存储过程,并且打印出值 请教 很难写,帮忙把 问一个包的问题 怎样解释pdf?急急急 java package的问题 float数据类型与八进制数的问题 java 数据库保存图片文件抛出异常
Runtime runtime = Runtime.getRuntime();
Process process = null;
try {
process = runtime.exec("cmd /c Tasklist"); BufferedReader in = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String s = "";
while ((s = in.readLine()) != null) {
//看看有没有想要的进程
}
}
process启动的程序是自己写的,我就是不知道process什么时候结束,除了用waitfor还有什么办法判断吗?
process = p;
} @Override
public void run() {
try {
process.waitFor();
} catch (InterruptedException ex) {
throw new RuntimeException();
}
} public void startListen() {
start();
} public boolean isExit() {
switch (getState()) {
case NEW:
throw new RuntimeException();
case TERMINATED:
return true;
default:
return false;
}
}
private Process process;
}