Hallo,
ich habe eine Klasse, die ein Kommando mithilfe von Runtime.getRuntime().exec() ausführt. Das funktioniert auch, aber leider scheint das nicht zu terminieren. (siehe http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=3)
Das System.out.println("Fertig") kommt leider nie. Also bekomme ich für das restliche Programm nicht raus, wann er denn mal fertig ist.
ich habe eine Klasse, die ein Kommando mithilfe von Runtime.getRuntime().exec() ausführt. Das funktioniert auch, aber leider scheint das nicht zu terminieren. (siehe http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=3)
Code:
public class CmdExec implements Runnable {
private String cmdline;
private CmdConsole commandConsole;
public CmdExec(String cmdline, CmdConsole commandConsole) {
this.cmdline = cmdline;
this.commandConsole = commandConsole;
}
public void run() {
commandConsole.setVisible(true);
try {
String line;
Process p = Runtime.getRuntime().exec(cmdline);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
StreamGobbler outputGobbler = new StreamGobbler(p.getInputStream());
StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream());
outputGobbler.start();
errorGobbler.start();
int i = p.waitFor();
System.out.println("FERTIG");
input.close();
Toolkit.getDefaultToolkit().beep();
} catch (Exception e) {
e.printStackTrace();
}
}
class StreamGobbler extends Thread {
InputStream is;
StreamGobbler(InputStream is) {
this.is = is;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
commandConsole.appendText(line + "\n");
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}