18 Stimmen

Findbugs gibt "Null pointer dereference of System.out", warum?

Ich benutze Java 1.7, Eclipse 3.7 mit dem FindBugs Plugin vom Marktplatz. Das Beispiel ist so schön wie der Himmel:

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

Diese Meldung war in der Vergangenheit nicht vorhanden, und die interne Implementierung war immer in System:

public final static PrintStream out = null;

Findbugs hat also Recht, aber hat sich etwas geändert, so dass die Meldung jetzt erscheint?

15voto

Denis Tulskiy Punkte 18706

In Java 6 sah es nämlich so aus:

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

Ich vermute, sie haben es in Java 7 vereinfacht und dem Compiler einige Ausnahmen hinzugefügt.

Die JVM verwaltet out, in und err in nativem Code, so dass die Fehlermeldung, die sie ausgibt, sinnlos ist.

11voto

Thirler Punkte 19460

Dies ist gekennzeichnet als Fehler in Findbugs 1.3.9. Es wurde für Findbugs 2.0 behoben und könnte zurückportiert werden.

3voto

Ivan Kelly Punkte 206

Das passiert nur mit openjdk, nicht mit dem sun jdk.

Das Problem ist ein Patch aus dem Jahr 2010, der Systemzeiten älter als 1970 zulässt.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X