Warum erhalte ich die Ausgabe des Prozesses erst, nachdem der Prozess beendet ist? Ich möchte die Prozessausgabe "live" erhalten, während der Prozess läuft und nicht nachdem der Prozess beendet wurde. Ich möchte einen Prozess wie einen JBoss ausführen, der die Protokollierung auf der Standardausgabe durchführt, daher benötige ich diese Informationen rechtzeitig und nicht nachdem der Prozess beendet wurde. Danke für Antworten.
Hier ist mein Code:
try {
process = processBuilder.start();
processOutput = process.getOutputStream();
processInput = process.getInputStream();
processReader = new BufferedReader(new InputStreamReader(
processInput));
processWriter = new BufferedWriter(new OutputStreamWriter(
processOutput));
while ((line = processReader.readLine()) != null) {
System.out.println(line);
}
processReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Erweiterung:
Also möchte ich ein externes Programm von einem Eclipse-Plug-In mit einem Button starten. Wenn ich auf den Button klicke, startet das Programm und die Ausgabe des externen Programms wird in die Konsole zurückgelangen. Wenn ich auf "stop" klicke, wird das Programm gestoppt. Hier ist, wie ich die Instanz des Prozess-Erstellungsprogramms erstelle. Und ich habe eine Beispielklasse erstellt, um das Prozess-Erstellungstool ohne den Start des gesamten Plugin-Projekts bei jeder Änderung zu testen.
Hier ist meine Prozess-Erstellungsinstanz, die Runnable implementiert:
@Override
public void run() {
List command = new ArrayList();
command.add(serverPath);
command.add(String.valueOf(count));
command.add(filePath);
processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true);
try {
process = processBuilder.start();
processOutput = process.getOutputStream();
processInput = process.getInputStream();
processReader = new BufferedReader(new InputStreamReader(
processInput));
processWriter = new BufferedWriter(new OutputStreamWriter(
processOutput));
System.out.println(process.waitFor());
while ((line = processReader.readLine()) != null) {
System.out.println(line);
}
processReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Die Parameter werden im Konstruktor übergeben. Und hier ist die Instanziierung:
public static void main(String[] args) throws Exception
{
SimulationProcess smp = new SimulationProcess(count, "file",
"program_name");
smp.run();
}