由processBuilder运行jar文件

时间:2015-09-17 02:13:44

标签: java processbuilder

我有那些代码

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对象时,我认为它会死掉。所以任何人都可以帮我解决这个问题。非常感谢任何答案:)

1 个答案:

答案 0 :(得分:0)

如果您的程序在打印1和打印2之间死亡,则错误消息和堆栈跟踪可能写入stderr,并且您只读{{1} }}

在致电stdout之前致电stderr,将stdout重定向至pb.redirectErrorStream(true);

pb.start()构造函数实际上是{em> vararg ,因此您的代码可以更改为:

ProcessBuilder