-1

システムコンソールを使用して、以下のコードのように行を読み込んでいます

public class Strings2 
{   
    public static void main(String[] args) 
    {
        String Name;        
        Console c = System.console();
        Name = c.readLine("%s", "Name?:");

        System.out.println(Name);
    }
}

しかし、これを実行すると NullPointerException が生成されます

ここに画像の説明を入力

なぜこれが起こるのか

上記のコードをEclipseで実行しています

4

5 に答える 5

3

うん、それは文書化されているように動作しています:

戻り値:
システム コンソール (存在する場合)、それ以外の場合は null。

コンソールがないため、null を返します。

コンソールから実行すれば問題ないはずですが、戻り値を確認して、null が返された場合は別の方法を取る必要があります。

于 2013-03-13T12:44:24.213 に答える
2

そのコードを Eclipse から実行している場合は、間違いなくそのエラーが発生します。Eclipse は別のストリームを使用しており、その中でコンソールをキャプチャすることはできません。ただし、UNIX シェルまたは Windows/Mac から実行すると、基盤となる OS がコンソールを JVM のリソース (コード) に接続するため、コードは問題なく動作します。

于 2013-03-13T12:45:19.590 に答える
0

public static コンソール console()

現在の Java 仮想マシンに関連付けられている一意の Console オブジェクトがあれば、それを返します。

戻り値: システム コンソール (存在する場合)、それ以外の場合は null。

于 2013-03-13T12:43:45.193 に答える
0

デバッガーを実行すると、System.console() から返されたときに c は null になります。

そのため、次の行でヌル ポインター例外がスローされます。

于 2013-03-13T12:44:24.587 に答える
0

あなたのコンテキストでは System.console() は利用できないので、null をチェックして別のアクションを見つける必要があります。

"System.console()

現在の Java 仮想マシンに関連付けられている一意の Console オブジェクトがあれば、それを返します。

戻り値: システム コンソールがある場合は、それ以外の場合は null。"

_

「仮想マシンにコンソールがあるかどうかは、基盤となるプラットフォームと、仮想マシンが呼び出される方法に依存します。仮想マシンが、標準の入力ストリームと出力ストリームをリダイレクトせずに対話型コマンド ラインから起動された場合、そのコンソールは存在し、通常、仮想マシンが起動されたキーボードとディスプレイに接続されます。たとえば、バックグラウンド ジョブ スケジューラによって仮想マシンが自動的に起動される場合、通常、コンソールはありません。」

java.sun.com から取得。

于 2013-03-13T12:48:14.567 に答える