Я не знаю, возможно ли это, но вы можете попробовать.
Я выполнения небольшой код на языке Perl в моей программе Java, как этотНепрерывный отклик от perl к java-программе
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);
}
Я могу получить выход программы на языке Perl в моей Java программы. Но я хочу, чтобы код perl предоставлял непрерывный вывод в Java-код. Подобно этому, когда цикл в perl печатает значение «i» в первый раз, я должен иметь возможность получить это значение в Java-коде. Чтобы я мог постоянно обновлять свой Java-интерфейс в соответствии с процессом, происходящим в коде Perl.
Ваш дизайн несколько испорчен. Сейчас вы выполняете один процесс (perl) от другого. Поэтому, когда программа perl завершена, она возвращает ответ. Если вы хотите что-то «непрерывное», вам нужно будет написать несколько perl, чтобы поговорить с java, возможно, с именованным каналом или некоторым обычным хранилищем. – gideon
@ Gideon: Да, это именно то, что я хочу, но у меня нет идеи, как это сделать. Можете ли вы поделиться некоторыми примерами, где эта вещь была реализована. – Chetna
Конечно, это возможно. Единственное, что мешает вам это сделать, - это строка 'process.waitFor();' внутри вашего кода (который ждет, пока процесс не завершится). – Howard