我有那些代码
URL location = ObjectUtil.class.getProtectionDomain().getCodeSource()
.getLocation();
String currentDir = location.getPath();
String drive = currentDir.substring(1, currentDir.indexOf("WEB-INF") + 7);
ArrayList<String> cmd = new ArrayList<String>();
cmd.add("java");
cmd.add("-cp");
cmd.add(drive + "/lib/ksm2batch.jar");
cmd.add("jp.co.kaneshindenki.ksm2batch.KSMBatchActionBase");
cmd.add(jobId);
cmd.add(serialized);
cmd.add(serializedParam);
ProcessBuilder pb = new ProcessBuilder(cmd.toArray(new String[cmd.size()]));
Process process = pb.start();
InputStreamReader r = new InputStreamReader(process.getInputStream());
BufferedReader br = new BufferedReader(r);
String ch;
while((ch = br.readLine()) != null) {
System.out.println(ch);
}
这些代码运行并调用文件名KSMBatchActionBase并将此文件调用为“Bkh0020”文件。在“Bkh0020”文件中,我有这些代码
System.out.println("1");
_inParams.setJnlNo(Integer.parseInt(StringUtil.SafeString(parameter.get("JnlNo"), "0")));
_inParams.setRerunKbn(StringUtil.SafeString(parameter.get("RerunKbn")));
_inParams.setMotoId(StringUtil.SafeString(parameter.get("MotoId")));
System.out.println("2");
进程运行并向我发送输出为“1”,我没有任何其他输出“2”或错误消息。当我将值传递给_inParams对象时,我认为它会死掉。所以任何人都可以帮我解决这个问题。非常感谢任何答案:)
答案 0 :(得分:0)
如果您的程序在打印1
和打印2
之间死亡,则错误消息和堆栈跟踪可能写入stderr
,并且您只读{{1} }}
在致电stdout
之前致电stderr
,将stdout
重定向至pb.redirectErrorStream(true);
。
pb.start()
构造函数实际上是{em> vararg ,因此您的代码可以更改为:
ProcessBuilder