Process.getOutputStream()
Hej Eksperter.Jeg har et problem som jeg har fået besvaret før, men hvis svar ikke virker i java 1.5.0.
Det jeg ønsker er at starte et program (simsys) med Runtime.getRuntime().exec("simsys").
og herefter kommunikere med det ved at oprette en læsetråd og en skrivetråd. Mit problem er at jeg ikke kan lave skrivetråden. Følgende er koden som jeg ønsker den, dog for eksemplets skyld kalder jeg "rev" (som i linux læser fra stdin og skriver hver linie baglæns).
<pre>
import java.io.*;
public class Example {
public Example () {
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("rev");
StreamGobbler errorGobbler =
new StreamGobbler(proc.getErrorStream(), "ERROR");
StreamGobbler outputGobbler =
new StreamGobbler(proc.getInputStream(), "OUTPUT");
errorGobbler.start();
outputGobbler.start();
proc.getOutputStream().write("reverse me\n\r".getBytes());
proc.getOutputStream().write("and me\n\r".getBytes());
proc.getOutputStream().write("also me\n\r".getBytes());
proc.getOutputStream().write("asdf\n\r".getBytes());
proc.getOutputStream().write((char)4);
proc.getOutputStream().flush();
int exitCode = proc.waitFor();
System.out.println("exit code: " + exitCode);
} catch (Throwable t) {
t.printStackTrace();
}
}
public static void main (String[] args) {
new Example();
}
class StreamGobbler extends Thread {
InputStream is;
String type;
StreamGobbler(InputStream is, String type ) {
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(type + ">" + line);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
</pre>
Når jeg kører ovenstående program forventer jeg at følgende bliver skrevet til skærmen:
<pre>
em esrever
em dna
em osla
fdsa
</pre>
Jeg har set spørgsmålet (eller lignende) stillet mange steder før .. eksempelvis:
http://forum.java.sun.com/thread.jspa?forumID=4&threadID=221173
http://forum.java.sun.com/thread.jspa?forumID=4&threadID=290316
http://forum.java.sun.com/thread.jspa?forumID=4&threadID=291150
Og jeg har selv stillet det her: http://www.eksperten.dk/spm/629751 , men ingen steder besvares mit spørgsmål. Hjælp udbedes .. jeg er villig til at ødsle .. igen.