Was passiert mit "System.out.println ()" in ausführbarem jar?

8

Angenommen, ich habe ein executable jar aus einem Code erstellt, in dem ich

verwendet habe %Vor%

Wenn wir das ausführbare jar ausführen, gibt es keine Konsole. Also, was passiert mit dieser Linie? Wie geht java mit dieser Situation um?

BEARBEITEN 01 :

HINWEIS : Wenn ich keine Konsole verwende, um jar auszuführen oder irgendeine Konsole damit zu verbinden.

EDIT 02 : Dinge klarer machen:

Ich weiß, dass nichts gedruckt wird, da es keine Konsole gibt ..! Ich möchte wissen, wie java in diesem Fall diese Zeile behandelt? Wird diese Zeile beim Generieren des Bytecodes für ein ausführbares jar weggelassen? Oder wird diese Linie gerade übersehen, wenn es keine Konsole gibt? Oder irgendetwas ...

    
minarmahmud 12.02.2015, 12:30
quelle

3 Antworten

5

Es gibt nichts Besonderes, wenn Sie Code in einer ausführbaren JAR-Datei ausführen. Wenn Sie es von einer Konsole ausführen, z. Mit java -jar foo.jar wird die Ausgabe immer noch auf die Konsole übertragen.

Wenn Sie den Code auf irgendeine Weise ausführen, die keine Konsole anfügt - wie zum Beispiel " javaw " unter Windows, dem Standardprogramm, das mit ausführbaren JAR-Dateien verknüpft ist -, wird die Ausgabe nirgendwohin gehen. Es wird keine Fehler verursachen - der Text wird einfach verloren gehen.

Beachten Sie, dass in diesem Fall, wenn Sie stattdessen System.console() verwenden, das null zurückgibt. Also:

%Vor%     
Jon Skeet 12.02.2015 12:36
quelle
2

Die Ausgabe wird weggelassen, solange Sie Ihre Anwendung nicht über ein Konsolenfenster ausführen ( java -jar executable.jar ). Darüber hinaus können Sie Ihre Java-Installation so konfigurieren, dass ein Konsolenfenster gestartet wird, sobald Sie eine Java-Anwendung starten. Die Ausgabe wird dann in das Konsolenfenster der JVM geschrieben. Sie finden einen Artikel Wie aktiviere und betrachte ich die Java-Konsole? im offiziellen Java-Web Website.

    
user1438038 12.02.2015 12:37
quelle
1

Ich öffne es von der Konsole (java -jar YourJar.jar) der Text wird in Ihrem Konsolenfenster gedruckt.

Wenn Sie es im Explorer (oder ähnlich) öffnen, sehen Sie den Text nicht

Um Ihre zweite Bearbeitung zu verdeutlichen: Der Bytecode wird nicht weggelassen, weil der Compiler nicht wissen kann, in welchem ​​Kontext der jar ausgeführt wird. Das jar kann immer von der Konsole aus aufgerufen werden, in diesem Fall muss die println dort bleiben.

Tatsächlich wären viele jar-Dateien ansonsten völlig nutzlos. Es gibt viele Java-Programme, die mit dem Benutzer über Ein- und Ausgabe der Konsole interagieren. Es ist nicht notwendig, dass ein Java-Programm eine GUI hat (oder komplett im Hintergrund läuft).

    
DiscoStu 12.02.2015 12:32
quelle

Tags und Links