想写个方法,启动另一个JAVA进程,调用Runtime.getRuntime()的问题

gary_jojo 2008-01-24 02:58:15
如题,想通过界面按钮启动另外一个后台进程。目前的做法是Process process = Runtime.getRuntime().exec(".\\x.bat");x.bat是用来启动进程的批处理文件,我想问的是,是否可以直接调用java.exe 指明mainclass来启动子进程,我试来试去都没成功,大家帮忙。
...全文
1323 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxsshy123456 2012-05-12
  • 打赏
  • 举报
回复
HEN NIU
qiheia 2011-03-18
  • 打赏
  • 举报
回复
try{
//execl.exe是你的excel进程
Runtime.getRuntime().exec("taskkill /IM execl.exe");

//test.xls是你的文件
Runtime.getRuntime().exec("del D:/test.xls");
}catch(Excepiton e){

}
niko7 2008-01-30
  • 打赏
  • 举报
回复
应该是7楼说的方法吧。
大体上不会错的,就看命令行怎么写了。
gary_jojo 2008-01-30
  • 打赏
  • 举报
回复
崩溃了,直接通过命令行 java test.Test没有问题,有HelloWorld打印出来的,但是Runtime.getRuntime().exec("java test.Test");就是没有结果,只在最后打出一个finish.楼上大家说的我也都试过,奇怪奇怪!贴出完整代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;


public class TestRuntime {
public static void main(String arg[]){

String s = null;
try {


Process process = Runtime.getRuntime().exec("java test.Test");
//Process process = Runtime.getRuntime().exec(".\\test.bat");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while((s=bufferedReader.readLine()) != null)
System.out.println(s);
process.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("finish");



}
}


package test;

public class Test {
public static void main(String args[]){
System.out.println("Hello World~~~");
}
}
LexChen 2008-01-28
  • 打赏
  • 举报
回复
回 cyberpeng

具体原因不清楚,我在XP下不用cmd /c执行不成功,用了就成功,猜测可能的原因是
使用了cmd /c 后才能够正确的使用系统的PATH环境变量,找到相应的执行程序。
海会圣贤 2008-01-26
  • 打赏
  • 举报
回复
在一个方法内写一个运行那个线程的方法,在按钮下调用。
(我也不知道可以不,你试下吧。)
cyberpeng 2008-01-25
  • 打赏
  • 举报
回复
能解释下么?感觉不加也应该没问题。

在XP里打cmd /?得到的解释
[code=BatchFile]CMD命令 Starts a new instance of the Windows XP command interpreter
/C Carries out the command specified by string and then terminates
[/code]
LexChen 2008-01-25
  • 打赏
  • 举报
回复
当用exec方法调用java.exe或其它可执行程序的时候,一定要使用下面的格式:

Process process = Runtime.getRuntime().exec("cmd /C java -cp ./bin test.Test");

如果没有标红色的部分,是不会执行正确的
cyberpeng 2008-01-24
  • 打赏
  • 举报
回复
Process process = Runtime.getRuntime().exec("java -cp ./bin test.Test");


试试。
dracularking 2008-01-24
  • 打赏
  • 举报
回复
手动在命令行运行一下
java test.Test
看看有无问题

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
public static void main(String arg[]) {
String s = null;
try {
Process process = Runtime.getRuntime().exec("java test.Test1");
// Process process = Runtime.getRuntime().exec(".\\test.bat");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
while ((s = bufferedReader.readLine()) != null)
System.out.println(s);
process.waitFor();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("finish");
}
}

/*
Hello World!!!
finish
*/

我运行过 没问题
youfly 2008-01-24
  • 打赏
  • 举报
回复
你可以把process的errorStream取出来打印,应该是提示类找不到的错误的,你需要在Runtime.getRuntime().exec("java test.Test"); 执行命令里设置classpath。
gary_jojo 2008-01-24
  • 打赏
  • 举报
回复
给大家看一下我的测试代码吧
public class TestRuntime {
public static void main(String arg[]){
String s = null;
try {
Process process = Runtime.getRuntime().exec("java test.Test");
//Process process = Runtime.getRuntime().exec(".\\test.bat");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while((s=bufferedReader.readLine()) != null)
System.out.println(s);
process.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("finish");

}
}
其中test.bat的内容为java -cp ./bin test.Test &
test.Test只是System.out.println("Hello World~~~"); 而已
现在的问题是,执行Process process = Runtime.getRuntime().exec(".\\test.bat");可以得到如下输入

D:\program_design\zjcc_project\RuntimeExec>java -cp ./bin test.Test
Hello World~~~
finish

而执行Process process = Runtime.getRuntime().exec("java test.Test");只是得到
finish
cyberpeng 2008-01-24
  • 打赏
  • 举报
回复
楼上正解。

既然bat可以起,直接调java.exe也肯定可以的。

譬如
Runtime.getRuntime().exec("java CompiledClass");


只要你在控制台能把要起的程序起起来,把命令复制为参数就OK了。
healer_kx 2008-01-24
  • 打赏
  • 举报
回复
不一定要用java.exe,多个Java的程序可以在一个虚拟机进程上跑,你可以研究一下ClassLoader的东西。

如果想用java.exe,那么实际和你用.bat文件是没有区别的。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧