2011-07-06 10 views
18

私はJava 1.7、Eclipse 3.7を市場からのFindBugsプラグインと共に使用しています。このメッセージは、過去と内部実装には存在しなかったFindbugsは、 "System.outのヌルポインタ逆参照"を返します。なぜですか?

class Application 
{ 
    public static void main(String[] args) 
    { 
    System.out.println("Bla"); 
    } 
} 

は、システムに常にだった:例では、天国のように素敵です

public final static PrintStream out = null; 

のでFindBugsのは正しいですが、その何かの変更を行いましたメッセージは今発生しますか?私は、彼らは、Java 7でそれを単純化し、コンパイラにはいくつかの例外を追加推測

public final static PrintStream out = nullPrintStream(); 

/** 
* The following two methods exist because in, out, and err must be 
* initialized to null. The compiler, however, cannot be permitted to 
* inline access to them, since they are later set to more sensible values 
* by initializeSystemClass(). 
*/ 
private static PrintStream nullPrintStream() throws NullPointerException { 
    if (currentTimeMillis() > 0) { 
     return null; 
    } 
    throw new NullPointerException(); 
} 

+1

ないが、ブロックのどこかに '何かにout'を割り当てている可能性があり、システムの時間(' static'ブロック)。このドキュメントに基づいて、FindBugsはまだ実験段階にあり、いつも正しく動作するとは限りません。これは、findbugsのバグのように聞こえる...私は、標準のJVMを使って実行するとコードが動作すると仮定しますか? –

+2

確かにそれは動作します。初期化は静的な{}にはもうできていないので、Java 7への切り替えに関係していると思います(Java 6バージョンはありません)。 –

答えて

15

がためにJava 6には、このように見えました。

JVMは、ネイティブコードでout、in、およびerrを管理します。したがって、このエラーメッセージは無意味です。

11

これは、Findbugs 1.3.9でbugとマークされています。これは、Findbugs 2.0で修正され、バックポートされる可能性があります。

+1

残念ながら、それはまだ起こっています。少なくとも私はまだMavenのFindbugsプラグインを使ってこのエラーを取得しています。リリース2.3.3の時点でFindbugs 2を使用するはずです。 –

+0

その場合、バグを再度報告する価値があるかもしれません。コメントには、findbugs 2で修正する必要があることが明確に記載されています。 – Thirler

関連する問題