18

Java 1.7、Eclipse 3.7 をマーケットプレイスの FindBugs プラグインと共に使用しています。例は天国のように素晴らしいです:

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

このメッセージは過去には存在せず、内部実装は常にシステムにありました:

public final static PrintStream out = null;

つまり、Findbugs は正しいのですが、メッセージが発生したことで何か変化がありましたか?

4

3 に答える 3

15

Java 6 では次のようになっているためです。

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();
}

だから私は彼らがJava 7でそれを簡素化し、コンパイラにいくつかの例外を追加したと思います.

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

于 2011-07-06T16:58:51.227 に答える
11

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

于 2011-11-29T10:55:46.010 に答える
3

これは、sun jdk ではなく、openjdk でのみ発生します。

この問題は、2010 年に投稿された、1970 年よりも古いシステム時間を許可するパッチです。

http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-July/009869.html

于 2012-10-23T21:29:55.860 に答える