2009-06-15 18 views
3

eclipseを使用してjava.io.Console APIを試しました。私のサンプルコードは次のとおりです。JavaコンソールAPI

package app; 

import java.io.Console; 

public class MainClass { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Console console = System.console(); 
     console.printf("Hello, world!!"); 
    } 

} 

私はこの例を実行しようとしたときに、次のエラーが発生しました。私は間違って行くのです

スレッドの例外 "メイン" java.lang.NullPointerExceptionが でapp.MainClass.main(MainClass.java:11)​​

?ありがとう。

答えて

6

あなたはEclipseを使用しているコメントで述べてきたので、EclipseのConsoleのためのサポートは、このbug reportによると、現在は存在しないことが表示されます。

System.consoleメソッドは現在のJava仮想マシンに関連付けられたコンソールを返し、コンソールがない場合はnullを返します。 System.console方法のドキュメントから:もしあれば

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

戻り値:

システムコンソール、もしあれば、そうでない場合はnull

残念ながら、これは正しい動作です。コードにエラーはありません。唯一可能な改善点は、Consoleオブジェクトでnullチェックを実行して、何かが返されたかどうかを確認することです。これにより、存在しないConsoleオブジェクトを使用しようとすると、NullPointerExceptionが無効になります。例えば

Console c = System.console(); 

if (c == null) { 
    System.out.println("No console available"); 
} else { 
    // Use the returned Console. 
} 
+0

ちょうどニックピックですが、System.out.printlnの代わりにSystem.err.printlnを使用します – Powerlord

0

System.consoleコンソールでアプリケーションを実行しない場合はnullを返します。提案については、this questionを参照してください。

+0

どのようにこの問題を解決するには?私はコマンドラインでアプリケーションを実行する必要がありますし、Eclipseの実行ボタンを使用しないでください? – Bharani

+0

私は同様の質問へのリンクで答えを更新しました。外部コンソール、バッチファイル、リモートデバッグなどで対処できます。 EclipseバグDBには、この問題へのリンクもあります。 – McDowell

0

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

コンソールを使用する前に、コンソールがヌルであるかどうかをテストする必要があります。