使用したコードからexecutable jar
を作成したとします
System.out.println()
実行可能jarを実行するとき、コンソールはありません。では、この行はどうなりますか? Java
はこの状況にどのように対処しますか?
編集01:
[〜#〜] note [〜#〜]:コンソールを使用してjar
を実行したり、コンソールを関連付けたりしていない状況です。
EDIT 02:より明確にする:
コンソールがないので、何も印刷されないことを知っています。この場合、この行をJava
がどのように処理するのか知りたいですか?実行可能なjarのバイトコードを生成するときに、この行は省略されますか?または、コンソールがないときにこの行を見落としているだけですか?または何か...
実行可能なjarファイルでコードを実行することについて特別なことは何もありません。コンソールから実行した場合、 _Java -jar foo.jar
_を使用すると、出力は引き続きコンソールに送られます。
実行可能なjarファイルに関連付けられているデフォルトのプログラムであるWindowsのjavaw
などのコンソールを接続しない方法でコードを実行すると、出力はどこにも行きません。エラーは発生しません-テキストは失われます。
その場合、代わりにSystem.console()
を使用すると、thatはnull
を返します。そう:
_System.out.printf("Foo%n"); // No problem. Goes nowhere.
System.console().printf("Foo%n"); // Would throw a NullPointerException.
_
コンソールウィンドウ(Java -jar executable.jar
)からアプリケーションを実行しない限り、出力は省略されます。さらに、Javaアプリケーションを起動するとすぐにコンソールウィンドウが起動するように、Javaインストールを構成できます。出力は、JVMのコンソールウィンドウに書き込まれます。公式のJava Webサイトで記事 Javaコンソールを有効にして表示するにはどうすればよいですか を見つけることができます。
コンソール(Java -jar YourJar.jar)から開くと、テキストがコンソールウィンドウに出力されます。
エクスプローラなどで開くと、テキストは表示されません。
2番目の編集を明確にするには:jarが実行されるコンテキストをコンパイラーが認識できないため、バイトコードは省略されません。 jarは常にコンソールから呼び出すことができます。その場合、printlnはそこにとどまる必要があります。
実際、そうでなければ、多くのjarファイルは完全に役に立たなくなります。たくさんのJavaコンソールの入出力によってユーザーとやり取りするプログラムがあります。JavaプログラムがGUIを持つためにはnotが必要です(または完全にバックグラウンドで実行します)。