从java运行一个.exe文件并继续运行
我想以编程方式运行.exe程序(如果它尚未运行)。 目前我使用进程生成器从java启动.bat。批处理文件在检查它是否正在运行后运行.exe。 问题是,java将不会继续,直到用户关闭.exe程序。我该如何解决这个问题?从java运行一个.exe文件并继续运行
Java代码:
try {
ProcessBuilder builder = new ProcessBuilder("open.bat");
final Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((br.readLine()) != null) {
}
System.out.println("command line terminated");
} catch (Exception err) {
err.printStackTrace();
System.out.println("error ");
}
批号:(open.bat)
tasklist | find "illustrator.exe"
if errorlevel 1 start "" "C:\Program Files (x86)\Adobe\Adobe Illustrator CS6\Support Files\Contents\Windows\illustrator.exe"
更新
使用...
start "" "C:\Program Files (x86)\Adobe\Adobe Illustrator CS4\Support Files\Contents\Windows\illustrator.exe"
由于open.bat
批处理文件,并使用...
try {
ProcessBuilder builder = new ProcessBuilder("open.bat");
builder.redirectError();
builder.inheritIO();
final Process process = builder.start();
final InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String text = null;
while ((text = br.readLine()) != null) {
System.out.println(text);
}
System.out.println("command line terminated");
System.out.println("Exited with " + process.waitFor());
} catch (Exception err) {
err.printStackTrace();
System.out.println("error ");
}
我可以得到批处理文件来运行和终止,仍然有插图的负载和运行。
主要增加的是呼叫ProcessBuilder#inheritIO
,这确实有些神奇,我不知道,但似乎让批处理文件终止......
这给出的行为与大多数操作系统命令解释程序或标准C库函数system()相当。
好极了!有用。感谢MadProgrammer并感谢大家。 – Audrey 2014-11-07 01:25:24
@Audrey是的,这是一个有趣的过山车骑“我不知道为什么这个作品,但它确实,所以不要想太久或它可能会停止”... ...同样旧的,同样的旧办公室比;) – MadProgrammer 2014-11-07 01:27:53
从API: pb.inheritIO() 的行为完全相同的方式调用 pb.redirectInput(Redirect.INHERIT) .redirectOutput(Redirect.INHERIT) .redirectError(重定向.INHERIT) – Audrey 2014-11-07 01:30:05
创建一个新的主题? – 2014-11-07 00:30:11
将'while((br.readLine())!= null){'移动到另一个线程,让它静静地消耗结果,这将允许剩下的代码,记住,IO往往是阻塞的,所以循环;) – MadProgrammer 2014-11-07 00:30:27
你得到“命令行终止”的输出吗?破坏你的进程 – 2014-11-07 00:34:19