java -jar twitie_tag.jar <path to model file> <path to input file> <output file>
我在java进程构建器中给出了上面的命令,如下所示
ProcessBuilder pb = new ProcessBuilder("java","-jar","twitie_tag.jar","models\\gate-EN-twitter.model", "newfile.txt");
pb.redirectErrorStream(true);
final Process process = pb.start();
InputStream stderr = process.getInputStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
System.out.println("Waiting ...");
System.out.println("Returned Value :" + process.exitValue());
但它在线程&#34; main&#34;中抛出错误为异常
java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
如果我给redirectoutputstream它没有任何东西它只是打印等待而退出值是1
我有一个jar文件twittejar,我在命令行中执行java, -jar,twitie_tag.jar,gate-EN-twitter.model,newfile.txt,&gt; outfile.txt(输出将保存在outfile.txt中)。如果我给 java,-jar,twitie_tag.jar,gate-EN-twitter.model,newfile.txt(输出将显示在该命令窗口本身)但是我需要执行这些命令java程序。
答案 0 :(得分:0)
在Linux或MacOSX上
private void runProcess(String jarFolder, String command) {
Process pr = null;
try {
pr = Runtime.getRuntime().exec(new String[] {
"/bin/sh",
"-c",
"cd " + jarFolder + " ; " + command
});
} catch (IOException e) {
e.printStackTrace();
}
}
(在Windows上,您使用相同的方法,但使用&#34; cmd.exe&#34;使用适当的参数。)
用以下方式调用:
runProcess(jarFolder,
"java -cp youJarFile packages.MainClass " +
param1 + " " + param2);
答案 1 :(得分:0)
然后问题是您没有运行Java命令的进程的输出或错误流。 您可能需要使用redirectOutput和redirectError方法重定向进程的输出,以便您可以查看运行jar文件的shell是否存在问题。
答案 2 :(得分:0)
你甚至&#34; .start()&#34;这个过程? ProcessBuilder仅累积您要在其下启动进程的条件,您需要在构建器对象上调用.start()以实际运行该进程并返回一个Process对象,您可以在该对象上执行.waitFor()。
请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html,因为说明中有一个很好的例子。
答案 3 :(得分:0)
文件文件=新文件(“errorlog.txt”);
ProcessBuilder pb = new ProcessBuilder("java","-jar","twitie_tag.jar","models//gate-EN-twitter.model", "newfile.txt");
pb.redirectOutput(file);
final Process process = pb.start();
InputStream stderr = process.getInputStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
System.out.println("Waiting ...");
System.out.println("Returned Value :" + process.exitValue());
感谢所有......他回答了我的问题