私は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();
}
:
ないが、ブロックのどこかに '何かにout'を割り当てている可能性があり、システムの時間(' static'ブロック)。このドキュメントに基づいて、FindBugsはまだ実験段階にあり、いつも正しく動作するとは限りません。これは、findbugsのバグのように聞こえる...私は、標準のJVMを使って実行するとコードが動作すると仮定しますか? –
確かにそれは動作します。初期化は静的な{}にはもうできていないので、Java 7への切り替えに関係していると思います(Java 6バージョンはありません)。 –