从java调用perl脚本时出现问题

从java调用perl脚本时出现问题,java,perl,Java,Perl,我需要使用java和参数在中心位置调用一个perl脚本。我使用了下面的代码,但它什么也不做。有人能告诉我缺少什么吗 final List<String> commands = new ArrayList<String>(); commands.add("perl"); commands.add("I:/golden_scripts/make-tp-patch.pl")

我需要使用java和参数在中心位置调用一个perl脚本。我使用了下面的代码,但它什么也不做。有人能告诉我缺少什么吗

            final List<String> commands = new ArrayList<String>();                

            commands.add("perl");
            commands.add("I:/golden_scripts/make-tp-patch.pl");
            commands.add(destpath+"/"+"scrfile.txt.org");
            commands.add(pro_name);
            commands.add(patch);
            ProcessBuilder pb = new ProcessBuilder(commands);
            Process p1 = pb.start();

假设您的命令是正确的,而不是文章中带有额外字符的打字错误,并且您的环境设置正确,那么您可能希望在perl脚本完成之前阻止

Process p1 = pb.start();
刚开始节目。你不是在等待它完成。您可能需要调用p1.waitFor,它将等待程序完成并返回退出代码


当waitFor返回时,您知道程序已完成或出错。使用getInputStream和getErrorStream中的inputStreams来获取perl脚本在运行时打印的STDOUT和STDERR消息可能也是一个好主意。

在不了解您的环境的情况下不可能回答。new ProcessBuildercommands中的引用是否是一个输入错误?我正在eclipse EE中运行它,它是在一个构建的web应用程序中运行的使用struts2和javas如果未能使用输入和错误流中的所有字节,可能会导致外部程序在执行过程中锁定。我想说,正确执行外部流程时,必须使用这些流。我通常启动后台线程来使用流,并在启动后台线程后立即让ProcessBuilder线程使用waitFor。