Potential Null-Pointer-Access in Eclipse

Status
Nicht offen für weitere Antworten.
S

Spacerat

Gast
Was jetzt kommt dürfte vllt. heikel sein...
Folgender Code:
Java:
boolean cull = (tex != null)? tex.getMaterial().isSet(MaterialFlag.FACECULLING) : false;
boolean frnt = cull && tex.getMaterial().isSet(MaterialFlag.CULLFRONT);
in der 2. Zeile wird hinter dem [c]&&[/c] ein potentieller Null-Pointer-Zugriff angewarnt. Ich frage mich, warum, denn schliesslich wird [c]cull[/c] ja auf false gesetzt und aufgrund von [c]&&[/c] tex gar nicht meh abgefragt. Kann da Eclipse nur nicht folgen oder kann der Null-Zugriff wirklich irgendwann (z.B. bei Multi-Threading) passieren?
 
S

SlaterB

Gast
was du alles von so automatischen Tools erwartest..

selbst
Java:
        String tex = null;
        boolean cull = false;
        boolean frnt = cull && tex.toString() != null;
ergibt bei mir ne Warning, oder kann das deine Version schon?
 
S

Spacerat

Gast
was du alles von so automatischen Tools erwartest..

selbst
...
ergibt bei mir ne Warning, oder kann das deine Version schon?
Nö... keine Warning... sondern einen Fehler... [c]tex can only be null at this location[/c]. [inronie]Ist ja auch gar nicht so offensichtlich.[/ironie]
Aber möglicherweise ist es ja doch zu viel verlangt, wenn Eclipse solche Lapalien erkennt... naja... Hauptsache der [c]camelCase[/c] stimmt :lol:.
@ARadauer: Nein, dort hab' ich noch nicht gefragt.
 

Wildcard

Top Contributor
oder kann der Null-Zugriff wirklich irgendwann (z.B. bei Multi-Threading) passieren?
Klar kann das passieren.

Hier ist tex != null und cull wird true
Java:
boolean cull = (tex != null)? tex.getMaterial().isSet(MaterialFlag.FACECULLING) : false;
Nun kommt ein zweiter Thread und setzt tex auf null.
Java:
boolean frnt = cull && tex.getMaterial().isSet(MaterialFlag.CULLFRONT);
cull == true tex==null => NPE
 
S

Spacerat

Gast
Ahso... Das ist hilfreich.
Wenn ich also die Methode synchronisiere, verschwindet auch die Warnung? Ähm... tex ist aber lokal (geht aus dem beispiel nicht hervor...), das bedeutet, die liegt bei einer Unterbrechung auf'm Stack... Hmmm...
Naja... trotzdem Danke.
 
S

Spacerat

Gast
Ja, OK... Hast wohl recht. Ich versuch' das mal einzuschränken. :D
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben