【发布时间】:2013-09-24 17:14:46
【问题描述】:
我不知道这是否可能,但想尝试一下。
我正在我的 java 程序中执行一个小的 perl 代码,就像这样
private void executePerlCode() {
Process process;
ProcessBuilder processBuilder;
BufferedReader bufferedReader = null;
try {
// this line is used to execute the perl program
processBuilder = new ProcessBuilder("perl", "D:\\test\\loop.pl");
process = processBuilder.start();
// To get the output from perl program
bufferedReader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line;
StringBuffer str = new StringBuffer();
while ((line = bufferedReader.readLine()) != null) {
str.append(line);
System.out.println(line);
}
// process.waitFor();
// Set the output on the textfield
// jTextArea1.setText(str.toString());
} catch (Exception e) {
System.out.println("Exception: " + e.toString());
} finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
而我的 perl 代码是
for (my $i=0; $i <= 9; $i++) {
print "$i\n";
sleep(1);
}
我能够在我的 java 程序中获得 perl 程序的输出。但我希望 perl 代码为 java 代码提供连续输出。像这样,当 perl 中的循环第一次打印 'i' 的值时,我应该能够在 Java 代码中获得该值。这样我就可以根据 Perl 代码中的流程不断更新我的 Java UI。
【问题讨论】:
-
那么你的设计有点缺陷。现在你正在从另一个执行一个进程(perl)。因此,当 perl 程序完成时,它会返回一个响应。如果你想要
continuous的东西,你需要编写一些 perl 来与 java 对话,可能是在命名管道或一些公共存储上。 -
@Gideon :是的,这正是我想要的,但不知道该怎么做。你能分享一些实现这个东西的例子吗?
-
当然可以。唯一阻止您这样做的是代码中的
process.waitFor();行(它一直等到进程终止)。 -
已删除
process.waitFor(),但仍无法按预期工作。 -
那么你现在对每一行都做些什么吗? setText() 调用是否在循环内?