2016-09-28 2 views
0

Während an jemandes Maven Java-Projekt in Eclipse sucht, bemerkte ich, dass eine der gespeicherten Ausführungskonfigurationen hat folgenden Maven Befehl auszuführen:Wie steuert System.out die Ausgabe an die Konsole in Eclipse?

test -Dtest=fooTest -Dcom.awesomesite=System.out 

Wenn ich fooTest.java Datei überprüft, ich folgende Aussagen bemerkt:

public final static String BAR = "com.awesomesite"; 
.... 
this.whereToWrite = System.getProperty(BAR); 

Offensichtlich stellt eine Instanzvariable "whereToWrite" dar, wohin die Ausgabedaten gehen sollen. Da ich Java-Anfänger bin, möchte ich nur verstehen, wie System.out direkte Ausgabe auf der Konsole gedruckt wird.

+0

Irgendwo im Inneren von Eclipse muss es 'System.out' setzen, um auf die Konsolenansicht zu zeigen. System.out ist ein modifizierbares statisches Feld –

+0

@LanceJava es ist eigentlich 'final'. Es wird durch Reflektion gesetzt, nachdem der JVM angefangen hat, soweit ich mich erinnere – SomeJavaGuy

+0

Reflection nicht erforderlich (und ich glaube nicht, dass Sie ein letztes Feld durch Reflexion setzen können), da ist ein [setOut (...)] (https : //docs.oracle.com/javase/7/docs/api/java/lang/System.html#setOut%28java.io.PrintStream%29) Methode. Das letzte Feld zu schätzen ist ein Wrapper und der Delegierte ist veränderbar –

Antwort

0

Wenn Sie eine Laufkonfiguration starten, startet Eclipse einen neuen Prozess, um es mit Runtime.getRuntime().exec(...) auszuführen. Dies gibt ein Process Objekt zurück, das den neuen Prozess darstellt.

Process hat ein getInputStream() Verfahren, das ein InputStream auf die Standardausgabe des Prozesses verbunden kehrt (wo normalerweise System.out schreibt). Eclipse liest von diesem Eingabestream und gibt aus, was es auf der Konsole empfängt.

Eclipse liest auch aus dem Prozessfehlerdatenstrom getErrorStream().

+0

Vielen Dank für Ihre Antwort, die unter der Haube-Ausführung beschreibt, dass ich keine Ahnung hatte zuvor. Ich bin gerade dabei, die Eclipse-Konfiguration und Runtime.getRunttime() .exec (...) zu lesen. – DaeYoung

0

System.out ist mit einer Umgebung/benutzerdefinierter Anzeige verbunden. Der Standard ist die Konsole.

Verwandte Themen