首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-05-13 
想写个方法,启动另一个JAVA进程,调用Runtime.getRuntime()的问题如题,想通过界面按钮启动另外一个后台进程

想写个方法,启动另一个JAVA进程,调用Runtime.getRuntime()的问题
如题,想通过界面按钮启动另外一个后台进程。目前的做法是Process process = Runtime.getRuntime().exec(".\\x.bat");x.bat是用来启动进程的批处理文件,我想问的是,是否可以直接调用java.exe 指明mainclass来启动子进程,我试来试去都没成功,大家帮忙。

[解决办法]
不一定要用java.exe,多个Java的程序可以在一个虚拟机进程上跑,你可以研究一下ClassLoader的东西。

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

[解决办法]
楼上正解。

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

譬如

Java code
Runtime.getRuntime().exec("java CompiledClass");
[解决办法]
给大家看一下我的测试代码吧
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

[解决办法]
你可以把process的errorStream取出来打印,应该是提示类找不到的错误的,你需要在Runtime.getRuntime().exec("java test.Test"); 执行命令里设置classpath。
[解决办法]
手动在命令行运行一下
java test.Test
看看有无问题

Java code
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*/
[解决办法]
当用exec方法调用java.exe或其它可执行程序的时候,一定要使用下面的格式:

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

如果没有标红色的部分,是不会执行正确的
[解决办法]
在一个方法内写一个运行那个线程的方法,在按钮下调用。
(我也不知道可以不,你试下吧。)
[解决办法]
应该是7楼说的方法吧。
大体上不会错的,就看命令行怎么写了。

热点排行