さまざまな環境で Java の System.console() を操作することについて、ここやネット上でたくさんの質問があります。それらのほとんどは、null を返すことの制限と警告、つまり「コンソールが利用できない場合」に関係しています。けっこうだ。
私の混乱は、Windows のコマンド ライン環境で作業している場合でも null が返されることに起因しています。(注意してください、これはEclipse 内から何かをすることに関するものではありません。それはすでに 100 万回も尋ねられ、回答されています。また、Eclipse を使用していません。また、ダブルクリック、右クリック、またはその他の種類のクリックについては話していません。 JAR ファイル (GUI ファイル マネージャーから開始する場合、明らかにコンソールはありません)。
これまでのところ、すべて Windows 7 で次の組み合わせを試しました。
- デフォルトの Windows\System32 "java"
- デフォルトの Windows\System32 "javaw"
- Sun/Oracle の標準 JavaSE JRE 7u25 "java"
- Sun/Oracle の標準 JavaSE JRE 7u25 "javaw"
- Sun/Oracle の JavaSE JDK 7u25 "java"
- Sun/Oracle の JavaSE JDK 7u25 "javaw"
また
- 上記の 6 つすべてが、Cygwin の mintty と単純な古い CMD.EXE の両方の下にあります。
java/javaw の違いの全体的なポイントは、一方にはコンソールがあり、もう一方にはコンソールがないということだと思いましたが、コマンドライン プロンプトから 12 回すべての試行を実行しているにもかかわらず、System.console() は常に null です。
テストベッドのコードは十分に単純で、他の OS (たとえば、System.console() は常に xterm などから存在するが、stdin が /dev/null からリダイレクトされると null になる Linux など) で期待どおりのことを行います。
ユーザーが CLI から実行しているときに、Windows で System.console() を取得するために、Java の闇の神々に犠牲にしなければならない処女ヤギは何ですか?