ProcessBuilder pb = new ProcessBuilder( "java", "-jar", "test.jar", Integer.toString( jobId ), Integer.toString( software ), Integer.toString( entryPoint ), application );
pb.directory( new File("/home/userName/TestBSC") );
Process proc = pb.start();
当我使用以下命令从终端运行jar文件时:
java -jar test.jar 135 3 3 appName
它可以很好地工作。该jar文件将一些内容推送到我的数据库中,因此我可以看到它正在运行。但是,当我使用上面提到的processBuilder代码从我的JavaServlet中执行时,我在我的数据库中没有得到任何数据,也没有收到任何错误信息。
然而,该进程本身正在运行,我用终端中的"ps ax"进行了检查。所以我想知道这里的区别在哪里?我做错了什么?
有人有想法吗?
编辑:更多代码:
ProcessBuilder pb = new ProcessBuilder( "java", "-jar", "test.jar", Integer.toString( jobId ), Integer.toString( software ), Integer.toString( entryPoint ), application );
pb.directory( new File("/home/userName/TestBSC") );
Process proc = pb.start();
System.out.println( "Job running" );
proc.waitFor(); // wait until jar is finished
System.out.println( "Job finished" );
InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
byte result[] = new byte[ in.available() ];
in.read( result, 0, result.length );
System.out.println( new String( result ) );
byte error[] = new byte[ err.available() ];
err.read( error, 0, error.length );
System.out.println( new String( error ) );
更新:
我尝试调用一个shell脚本而不是我的jar文件。因此,我从我的java文件中使用processbuilder调用了一个shell脚本。
我的shell脚本执行以下操作:
java -jar test.jar "$1" "$2" "$3" "$4"
好的,它仍然没有起作用。所以我尝试了这个:
gnome-terminal -x java -jar test.jar "$1" "$2" "$3" "$4"
突然它起作用了!但是它会打开gnome终端,然后执行jar文件。
所以我想知道,这是否与在eclipse中未显示的输出有关?我真的不明白。现在这是一个很好的解决方法。但是我真的希望在每次执行jar时不必打开终端来使其正常工作。
java -jar test.jar 135 3 3 appName
可以工作,现在又说java -jar test.jar "$1" "$2" "$3" "$4"
不能工作,这很奇怪。而且为什么你有两个不同的JAR文件? - Mickael