Hallo!
Ich versuche gerade einen JAVA-Wrapper zu schreiben, der sowohl Daten aus einem interaktiven Programm liest und auch Daten in dasselbe Programm schreibt. Das interaktive Program ist in Perl geschrieben und wenn ich es manuell benutze, gibt es keine Probleme. Der relevante Teil meines Java Programms sieht wie folgt aus:
Das Problem ist, dass das Programm endlos lang läuft, aber nichts ausgibt.
Ich vermute, dass diese Probleme dadurch entstehen, dass das Perl-Programm ein paar
Sekunden zum Laden braucht. Deshalb wollte ich mithilfe von "process.wait()" den Thread für ein paar Sekunden warten lassen, also
Dadurch bekomme ich aber die folgende Fehlermeldung:
Exception in thread "main" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at compare.Processor.<init>(Processor.java:50)
at compare.Processor.main(Processor.java:129)
mit der ich nichts anfangen kann. Kann mir jemand sagen, wie ich diesen Fehler beheben kann?
Vielleicht ist die "wait()" Operation ja auch nicht die Lösung für das eigentliche Problem.
Komisch ist nur, dass wenn ich das gleiche Verfahren (ohne wait()) auf ein anderes interaktives Programm
anwende (ich habe es mit dem Ruby-Interpreter "irb" versucht), das Schreiben und Lesen aus dem Programm völlig problemlos funktioniert.
Vielen Dank im Voraus!
Ich versuche gerade einen JAVA-Wrapper zu schreiben, der sowohl Daten aus einem interaktiven Programm liest und auch Daten in dasselbe Programm schreibt. Das interaktive Program ist in Perl geschrieben und wenn ich es manuell benutze, gibt es keine Probleme. Der relevante Teil meines Java Programms sieht wie folgt aus:
Code:
private OutputStreamWriter outstream;
private BufferedReader instream;
Process process = Runtime.getRuntime().exec("perl " +
"/workspace/trec-qa-2006/ext/WordNetSimilarity/WordNet-Similarity-1.03/utils/similarity.pl " +
"--type=WordNet::Similarity::wup --interact");
outstream = new OutputStreamWriter(process.getOutputStream());
instream = new BufferedReader(new InputStreamReader(process.getInputStream()));
outstream.write("eat\n");
outstream.write("feed\n");
outstream.flush();
String line = null;
while((line=instream.readLine()) != null){
System.out.println("Line: " + line);
}
Das Problem ist, dass das Programm endlos lang läuft, aber nichts ausgibt.
Ich vermute, dass diese Probleme dadurch entstehen, dass das Perl-Programm ein paar
Sekunden zum Laden braucht. Deshalb wollte ich mithilfe von "process.wait()" den Thread für ein paar Sekunden warten lassen, also
Code:
try {
process.wait(7000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
Dadurch bekomme ich aber die folgende Fehlermeldung:
Exception in thread "main" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at compare.Processor.<init>(Processor.java:50)
at compare.Processor.main(Processor.java:129)
mit der ich nichts anfangen kann. Kann mir jemand sagen, wie ich diesen Fehler beheben kann?
Vielleicht ist die "wait()" Operation ja auch nicht die Lösung für das eigentliche Problem.
Komisch ist nur, dass wenn ich das gleiche Verfahren (ohne wait()) auf ein anderes interaktives Programm
anwende (ich habe es mit dem Ruby-Interpreter "irb" versucht), das Schreiben und Lesen aus dem Programm völlig problemlos funktioniert.
Vielen Dank im Voraus!