Input/Output Process.getErrorStream = OutputStream

Hi miteinander,

Ich beschäftige mich gerade mit Input/Output-Streaming und wenn ich von einem mit dem folgendem Code gestartetedem Process:
Java:
Process p = Runtime.getRuntime().exec("java test.jar");
den OutputStream haben will, dann muss ich ja
Java:
p.getInputStream();
verwenden (Dann sollte das ausgegeben werden was das ausgeführte Programm mit "System.out.println("");" ausgibt).

Jetzt habe ich das mal gemacht, es funktioniert aber nicht. Dann habe ich das mal auf getErrorStream(); umgeändert und es funktionierte...

Weiß jemand warum das so ist?

Gruß PNGamingPower
 

Ark

Top Contributor
Ich behaupte mal, der gestartete Prozess hat in die Fehlerausgabe geschrieben. ;) Kann es sein, dass du Fehlermeldungen (Exceptions etc.) abfangen willst?

Ark
 
Ja, unter anderem, da ich ein Log-Panel mit verschiedenen TextAreas machen möchte um eben die rauszufiltern. Jedoch weiß ich, dass diese Ausgaben mit System.out im Sub-Program gemacht worden sind.
 
M

modularity

Gast
Tja, dann hilft wohl nur mit 2 Threads sowohl Input als auch Error zu lesen wenn du nicht genau weißt wo was hingeschrieben wird (Throwable.printStackTrace() z.b. schreibt IMMER in ERROR).
 

Ark

Top Contributor
Okay, mal anders gefragt: Was willst du denn damit bezwecken? Was soll am Ende rauskommen?

Was Umleitungen von sysin/sysout/syserr angeht, ist man mit brauchbaren Shells wesentlich besser bedient als etwa bei Windows. Keine Ahnung, wie man bei Letzterem z.B. syserr in sysout umleitet.

Ark
 
Zuletzt bearbeitet:
Ich möchte gerne eine GUI für ein Java Programm machen. Da werden dann verschieden Logfenster sein. Jetzt wollte ich nunmal den ErrorStream lesen um dann das in den ErrorLog zu schreiben. Das selbe mit dem OutputStream in den normalen Log. Natürlich vom Subprogramm.

Gelöst habe ich das nun schon, nur würde mich interessieren, wie etwas was durch System.out ausgegeben wird im getErrorStream zu suchen hat...
 
S

SlaterB

Gast
könntest du dein test.jar als Quellcode und das Ausleseprogramm zur Verfügung stellen?
vielleicht erkennt man etwas, was sich rein aus der logischen Bearbeitung im Kopf nicht ergibt
 
Weil im Code des ausgeführten Programms "System.out" steht :)

Hier ist der Code:
Java:
try {
	p = Runtime.getRuntime().exec("java -jar test.jar");
} catch (IOException e) {
	e.printStackTrace();
}

try {
	out = new BufferedReader(new InputStreamReader(p.getInputStream(), "UTF-8"));
	err = new BufferedReader(new InputStreamReader(p.getErrorStream(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
	e.printStackTrace();
}
Executors.newSingleThreadExecutor().execute(new Runnable() {
	@Override
	public void run() {
		try {
			while ((s = out.readLine()) != null) {
				s = s.replace(">", "");
				if (s == "" || s == " ")
					return;
				if (s.length() > 0) {
					System.out.println("INFO: " + s);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
});

Executors.newSingleThreadExecutor().execute(new Runnable() {
	@Override
	public void run() {
		try {
			while ((s = err.readLine()) != null) {
				s = s.replace(">", "");
				if (s == "" || s == " ")
					return;
				if (s.length() > 0) {
					System.out.println("ERR: " + s);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
});

Habe jedoch mal ein eigenes Program getestet und bin draufgekommen, dass dass wohl an der auszuführenden Datei liegen muss, da beim System.out.println(); das Zeug auch aus dem richtige Stream. Ich schau mir mal den Code an. (Es handelt sich um die CraftBukkit.jar, falls ihr das testen möchtet: hier). Da werden nämlich Plugins geladen und in einem Plugin von mir, mit diesem Code etwas ausgegeben:
Java:
System.out.println("[BukkitControllerPlugin] BufferedReader has been enabled!");
und so empfängt es mein Program:
Code:
ERR: 18:30:59 [INFORMATION] [BukkitControllerPlugin] BufferedReader has been enabled!
 
Zuletzt bearbeitet:
J

J7Dev

Gast
Mal nur so ganz nebenbei als Tipp und auch in Anlehnung daran : http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

Die Info das es sich um Bukkit handelt hätte in deinen ersten Post gehört !

Dessweiteren gehört die Frage warum die Log-Ausgaben von Bukkit über den Error-Stream kommen eher ins Bukkit-Forum als hier ins Java-Forum, denn alles was wir dir hier sagen können ist :

1) Im Normalfall ist System.out dann auch mit Process.getInputStream und System.err mit Process.getErrorStream verbunden. Wenn innerhalb von Bukkit hier etwas dran gedreht wird ala System.out wird sonstwohin umgeleitet dann kann das hier niemand wissen. Vor allem dann nicht wenn du uns nicht mal sagst das es um Bukkit geht. (Persönlich gehe ich mal davon aus das ALLES zum Logger (Log4J) umgeleitet und dann letztendlich über ERR rausgeschrieben wird. Grund : auch Ausgaben über OUT sollen im Log stehen.)

2) Das es auch vom verwendeten OS abhängt ob es überhaupt einen Unterschied zwischen OUT und ERR gibt oder nicht. Unter Unix kann man sich da ziemlich sicher sein, aber unter Windows eher weniger. Das was viele als "DOS" beziechnen ist lediglich ein sog. "Befehlszeileinterpreter" der selbst NICHT den Unterschied zwischen OUT und ERR kennt wesshalb es auch keine gesonderten Pipes gibt wie unter Unix üblich. Windows selbst kennt diesen Unterschied zwar, aber es wird denke ich mal schon irgendwo Sinn machen sich für sowas von CMD.exe zu lösen. In wie weit es hier genaue Spezifikationen gibt ist im MSDN nachlesbar.


Da du selbst von einem Test sprichst bei dem eben das erwartete Verhalten eintritt, nämlich das das was du in OUT schreibst auch über InputStream ankommt sollte einem klar sein das wenn es bei einer fremden API eben nicht so ist das dort intern irgenwo OUT auf ERR umgeleitet wird und NICHT an einem Bug oder Fehler in Java selbst liegt. Das sind Grundlagen des Multi-Processing und sollte man Wissen wenn man sowas vorhat wie du.
 
@J7DEV

Danke für den Link.

Werde diese Tipps nun beachten. Hätte gesagt zuerst ein paar Tests machen sollen, bevor ich das hier poste. Tut mir leid...

Jedoch hast du mir auch geholfen, da ich nicht daran gedacht habe, das Bukkit ja mit dem Logger arbeitet.

Ebenso Danke für 2) :toll:
Das wusste ich nicht.

Ich habe es nun gelöst und auch danke an die anderen Antwortgeber. :toll:

Gruß PNGamingPower
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
D Java Process OutputStream ist null Allgemeine Java-Themen 4
X Problem bei process.start() ExitValue Allgemeine Java-Themen 5
T Mit Java auf die Konsole eines Process-Objekts zugreifen Allgemeine Java-Themen 10
J Download: Filename + Process waitFor() Allgemeine Java-Themen 5
S Wie beendet man einen Process in Java Platform unabhänging? Allgemeine Java-Themen 8
M Process wird gestoppt und nach beenden der Anwendung fortgeführt Allgemeine Java-Themen 4
G Process.destory() == CTRL+C Allgemeine Java-Themen 2
P Swing GUI Process anzeigen Allgemeine Java-Themen 10
F Process.getInputStream unter Linux Allgemeine Java-Themen 7
schlingel Process - Ausgabe leer Allgemeine Java-Themen 5
G ungepufferter Process.getInputStream Allgemeine Java-Themen 10
J Process beenden ...aber wie ? Allgemeine Java-Themen 19
G Process - mehrere Commands?! Allgemeine Java-Themen 2
MQue auf gestarteten Process warten Allgemeine Java-Themen 7
G Process.wait() auf Folgeprozesse mitwarten Allgemeine Java-Themen 29
P Bedeutung der Process.exitValue() Werte? Allgemeine Java-Themen 3
J Process auf Console anzeigen lassen. Allgemeine Java-Themen 5
S Process - Befehle senden Allgemeine Java-Themen 13
B Process Builder Allgemeine Java-Themen 10
D Thread & Process: Beenden einer Batch-Datei Allgemeine Java-Themen 8
J process.getInputStream() hängt auf merkwürdige Art und Weise Allgemeine Java-Themen 7
D Fremdes Programm schließen (ohne process.destroy()) Allgemeine Java-Themen 8
S process.waitFor() endet mit -1 Allgemeine Java-Themen 3
M Process -> getInputStream -> nur gepuffert ? Allgemeine Java-Themen 12
A Runtime Process bricht nicht ab! Allgemeine Java-Themen 7
C Process output Allgemeine Java-Themen 7
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
T Input und Outputstream , serielle Schnittstelle Allgemeine Java-Themen 1
Meeresgott Input/Output OutputStream löscht Datei Allgemeine Java-Themen 7
F Jar OutputStream Allgemeine Java-Themen 4
T Outputstream write() gets blocked using RXTX to communicate with HC-05 BT Module Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
M rxtx OutputStream sendet falsche werte Allgemeine Java-Themen 3
L Abspeichern von OutputStream Allgemeine Java-Themen 6
E Outputstream an verschiedenen Positionen beschreiben Allgemeine Java-Themen 4
A Eigenen OutputStream schreiben und verwenden Allgemeine Java-Themen 9
D zip Dateien schreiben mit in/outputstream Allgemeine Java-Themen 10
S OutputStream via POST senden Allgemeine Java-Themen 4
T OutputStream to InputStream Allgemeine Java-Themen 8
W StringBuilder effektiv auf OutputStream schreiben Allgemeine Java-Themen 3
Landei CipherInput/OutputStream-Problem Allgemeine Java-Themen 2
S von OutputStream in InputStream schreiben ohne das es blockiert..? Allgemeine Java-Themen 2
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
S outputstream über fileUrl Allgemeine Java-Themen 15
L Problem mit dem OutputStream eines Prozesses Allgemeine Java-Themen 9
G OutputStream to System.out Allgemeine Java-Themen 35
I input-/outputstream Allgemeine Java-Themen 6
Junktyz In Writer und Outputstream wird teilweise nicht geschrieben Allgemeine Java-Themen 3
reibi FileOutputStream aus OutputStream erstellen Allgemeine Java-Themen 7
H Problem mit OutputStream Allgemeine Java-Themen 5
T OutputStream - Prozente ermitteln Allgemeine Java-Themen 3
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
A Inputstream in Outputstream umleiten Allgemeine Java-Themen 7
D Cipher(In)OutputStream Allgemeine Java-Themen 3
R Ladebalken für einen Outputstream. Allgemeine Java-Themen 10
J Binärdateien mit Input/Outputstream lesen und schreiben Allgemeine Java-Themen 3
m@nu Schreibschutz entfernen und OutputStream öffnen Allgemeine Java-Themen 6
T Problem mit Outputstream? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben