Теперь у меня есть некоторые из этих исключений, и я всегда изо всех сил пытаюсь их решить, поэтому любые руководства или советы о том, как их исправить, были бы великолепны, вместо того, чтобы полагаться на других, чтобы помочь им в этом. В настоящее время у меня есть один совет о том, как исправить это было бы оценено, но и советы в целом о том, как отслеживать причину проблем, было бы лучше в долгосрочной перспективе.Каков наилучший способ отслеживания NullPointerExceptions?
class Egg extends Bee{
protected void anotherDay() {
eat();
if(age>=3)
{
HashMap<String, Hive> thisHive = Garden.GARDEN.getHiveMap();
Larvae larvae = new Larvae(this.health, this.age);
thisHive.get("a").bees.set(thisHive.get("a").beeIndex, larvae); //-------LINE 27
//thisHive.get("a").replaceBee(larvae) Line 27 was origionally this throwing the same exception
}
age++;
System.out.println("Egg" + " age " + this.age + " health " + this.health);
}
}
import java.util.ArrayList;
class Hive {
protected int honey;
protected int royalJelly;
protected int pollen;
public int beeIndex; // used to know what the index of bee you are in is
public boolean holdAdd;
ArrayList<Bee> bees = new ArrayList<Bee>();
protected Hive(int honeyStart, int royalJellyStart, int pollenStart)
{
bees = new ArrayList<Bee>();
this.setHoney(honeyStart);
this.setRoyalJelly(royalJellyStart);
this.setPollen(pollenStart);
System.out.println("hive made");
System.out.println(honey + " honey");
System.out.println(royalJelly + " royalJelly");
System.out.println(pollen + " pollen");
holdAdd = false;
}
//code removed ...
public void replaceBee(Bee addBee) {
bees.set(beeIndex, addBee);
}
// code removed
protected void anotherDay() {
int i = 0;
for(int k = 0; k < bees.size(); k++)
{
i++;
Bee bee = bees.get(k);
bee.anotherDay(); // ----------------LINE 144
beeIndex = i;
}
// code removed
}
}
public class Garden {
static HashMap<String, Hive> HiveMap = new HashMap<String, Hive>();
public static final Garden GARDEN = new Garden();
public static void main(String[] args) {
GARDEN.anotherDay(); //------------------LINE 21
}
}
//CODE REMOVED
public HashMap<String, Hive> getHiveMap()
{
return Garden.HiveMap;
}
// CODE REMOVED
protected void anotherDay() {
//CODE REMOVED
//should find all Hives and call anotherday() on them each
for(Hive currentHive : HiveMap.values()){
currentHive.anotherDay(); //------------LINE 56
}
}
//CODE REMOVED
}
StackTrace дает линию, где происходит NullPointer. Если нулевой указатель можно выбросить только из одного места в конкретной строке, то вы знаете, какая переменная была нулевой и вызвала исключение. Если в этой строке есть несколько возможностей, отладчик поможет. Затем просто отмените стек вызовов, чтобы найти, где появился null. – Tobb
Ну, если вы пытаетесь ссылаться на объект, который является нулевым, а этот объект МОЖЕТ быть нулевым, проверьте, имеет ли он значение null перед доступом. Если объект никогда не должен быть нулевым, тогда у вас есть логическое условие ошибки в вашем коде, и вам нужно выяснить, почему. – OldProgrammer
Ваш код кажется неуместным для вашего вопроса. Какая связь между ними? Вы просите нас отладить его для вас? – Raedwald