Ich habe gerade eine sehr seltsame NullPointerException
gefunden. Zuerst erstelle ich ein NumberFormat
wie folgt aus (beachten Sie, dass die Standard-Locale
Deutschland wäre, ich weiß nicht, ob das hilft):Warum wirft NumberFormat.format eine NullPointerException?
NumberFormat angleFormat = NumberFormat.getNumberInstance(Locale.UK);
angleFormat.setMaximumFractionDigits(5);
angleFormat.setMinimumFractionDigits(0);
Dann habe ich versucht, ein Doppel damit zu formatieren. Dies geschieht mit einem neuen Thread, der von einem Lambda erstellt wird, während angleFormat
bei der Methode deklariert wird, die das Lambda enthält. Der Code, wo die Ausnahme wird wie folgt geworfen aussieht:
con.println("D" + moveId + (state.isEnemyInSightOf(e) ? "+" : "-")
+ angleFormat.format(e.getAngle()) // line 123 - error is here
+ (state.isMissileInSightOf(e) ? "+" : "-")
+ angleFormat.format(e.getSight())
+ (e.getLastShot() >= 10 || e.getLastShot() <= -1 ? "+" : "-")
+ angleFormat.format(e.getLives()));
e.getAngle()
gibt ein double
, so dass es nicht null zurückkehren kann. Allerdings habe ich diese Ausnahme erhalten:
Exception in thread "Thread-1" java.lang.NullPointerException
at java.text.DecimalFormat.fastDoubleFormat(Unknown Source)
at java.text.DecimalFormat.fastFormat(Unknown Source)
at java.text.NumberFormat.format(Unknown Source)
at server.game.Simulator.lambda$0(Simulator.java:123)
at server.game.Simulator$$Lambda$3/23162747.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Ich bin sicher, dass e
wegen der Ausnahme der Stacktrace nicht null ist, wäre es a) werden eine Zeile früher geworfen und b) nicht java.text.DecimalFormat.fastDoubleFormat
Warum wird NullPointerException
geworfen manchmal, und manchmal funktioniert es ohne Probleme? Und was bedeutet das? Der Fehler scheint reproduzierbar zu sein, aber nicht sehr oft.
was ist er Linie 123? –
'" NullPointerException manchmal geworfen, und manchmal funktioniert es ohne Probleme? Und was bedeutet das? "' - dieser intermittierende Fehler riecht nach einem Threading-Problem. Ist das eine GUI? Bist du vorsichtig mit dem Threading deines Codes? –
Sind Sie sicher, dass "e" selbst nicht "null" ist? – Mureinik