【发布时间】:2016-06-23 14:03:05
【问题描述】:
我有以下代码:
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"
突然间它起作用了! 但是它会打开执行 jar 文件的 gnome-terminal。
所以我想知道,这是否与 eclipse 中未显示的输出有关?我真的不明白。现在这是一个很好的解决方法。但我真的很想在每次执行 jar 时都不打开终端的情况下让它工作。
【问题讨论】:
-
过程中是否有任何错误/异常?
-
尝试给出
java的完整路径。 -
@MickaëlB:不,很遗憾没有。
-
@PeterMmm:我也尝试过,但结果相同。或者等等......你对java是什么意思。你的意思是 jar 文件或 java jre 的完整路径?
-
@PeterMmm:我现在尝试了这个:/usr/lib64/jvm/java-7-openjdk/bin/java -jar....但这也不起作用。
标签: java jar processbuilder