web-dev-qa-db-ja.com

実行可能jarの「System.out.println()」はどうなりますか?

使用したコードからexecutable jarを作成したとします

System.out.println()

実行可能jarを実行するとき、コンソールはありません。では、この行はどうなりますか? Javaはこの状況にどのように対処しますか?

編集01

[〜#〜] note [〜#〜]:コンソールを使用してjarを実行したり、コンソールを関連付けたりしていない状況です。

EDIT 02:より明確にする:

コンソールがないので、何も印刷されないことを知っています。この場合、この行をJavaがどのように処理するのか知りたいですか?実行可能なjarのバイトコードを生成するときに、この行は省略されますか?または、コンソールがないときにこの行を見落としているだけですか?または何か...

14
Minar Mahmud

実行可能なjarファイルでコードを実行することについて特別なことは何もありません。コンソールから実行した場合、 _Java -jar foo.jar_を使用すると、出力は引き続きコンソールに送られます。

実行可能なjarファイルに関連付けられているデフォルトのプログラムであるWindowsのjavawなどのコンソールを接続しない方法でコードを実行すると、出力はどこにも行きません。エラーは発生しません-テキストは失われます。

その場合、代わりにSystem.console()を使用すると、thatnullを返します。そう:

_System.out.printf("Foo%n"); // No problem. Goes nowhere.
System.console().printf("Foo%n"); // Would throw a NullPointerException.
_
8
Jon Skeet

コンソールウィンドウ(Java -jar executable.jar)からアプリケーションを実行しない限り、出力は省略されます。さらに、Javaアプリケーションを起動するとすぐにコンソールウィンドウが起動するように、Javaインストールを構成できます。出力は、JVMのコンソールウィンドウに書き込まれます。公式のJava Webサイトで記事 Javaコンソールを有効にして表示するにはどうすればよいですか を見つけることができます。

Activate Java console

2
user1438038

コンソール(Java -jar YourJar.jar)から開くと、テキストがコンソールウィンドウに出力されます。

エクスプローラなどで開くと、テキストは表示されません。

2番目の編集を明確にするには:jarが実行されるコンテキストをコンパイラーが認識できないため、バイトコードは省略されません。 jarは常にコンソールから呼び出すことができます。その場合、printlnはそこにとどまる必要があります。

実際、そうでなければ、多くのjarファイルは完全に役に立たなくなります。たくさんのJavaコンソールの入出力によってユーザーとやり取りするプログラムがあります。JavaプログラムがGUIを持つためにはnotが必要です(または完全にバックグラウンドで実行します)。

1
DiscoStu