This site requires JavaScript, please enable it in your browser!
Greenfoot back
raging_ewok
raging_ewok wrote ...

2018/5/28

java.lang.NullPointerException

raging_ewok raging_ewok

2018/5/28

#
For some reason, I am getting the NullPointerException in my code and I don't know why.
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class MyWorld3 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class MyWorld3 extends World
{  
    private ScoreBoard scoreboard;

    /**
     * Constructor for objects of class MyWorld3.
     * 
     */
    public MyWorld3()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(1100, 600, 1); 
        prepare();
    }

    private void prepare()
    {
        SpaceShip2 spaceship2= new SpaceShip2();
        addObject(spaceship2, getWidth()/2, getHeight()/2);
        ScoreBoard scoreboard = new ScoreBoard();
        addObject (scoreboard, 79, 19);
    }

    public void act()
    {
        super.act();
        
        if(Greenfoot.getRandomNumber(1000) < 20)
        {
            Asteroid asteroid = new Asteroid();
            addObject(asteroid, Greenfoot.getRandomNumber(getWidth()-20)+10, -30);
            scoreboard.addScore(1);
            
        }
    }

    public void endGame()
    {
        Death go = new Death();
        Greenfoot.setWorld(go);
    }
}
danpost danpost

2018/5/28

#
Line 40 will fail because scoreboard on that line, which refers to scoreboard declared on line 11, is null. The scoreboard added to the world on line 29 is the Scoreboard object assigned to the locally declared one on line 28. That is, you have two different variables called scoreboard -- the one local to the prepare method and the instance field one. Remove the first Scoreboard from line 28 so that there is no local variable and the new Scoreboard object is assigned to the instance field (which is what line 40 tries to add a score to).
raging_ewok raging_ewok

2018/5/28

#
My Code is still getting a NullPointer Error
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class MyWorld3 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class MyWorld3 extends World
{  
    private ScoreBoard scoreboard;

    /**
     * Constructor for objects of class MyWorld3.
     * 
     */
    public MyWorld3()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(1100, 600, 1); 
        prepare();
    }

    private void prepare()
    {
        SpaceShip2 spaceship2= new SpaceShip2();
        addObject(spaceship2, getWidth()/2, getHeight()/2);
        addObject (scoreboard, 79, 19);
    }

    public void act()
    {
        super.act();

        if(Greenfoot.getRandomNumber(1000) < 20)
        {
            Asteroid asteroid = new Asteroid();
            addObject(asteroid, Greenfoot.getRandomNumber(getWidth()-20)+10, -30);
            scoreboard.addScore(1);

        }
    }

    public void endGame()
    {
        Death go = new Death();
        Greenfoot.setWorld(go);
    }
}
raging_ewok raging_ewok

2018/5/28

#
java.lang.NullPointerException at greenfoot.World.addObject(World.java:412) at MyWorld3.prepare(MyWorld3.java:28) at MyWorld3.<init>(MyWorld3.java:21) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at greenfoot.core.Simulation.newInstance(Simulation.java:617) at greenfoot.platforms.ide.WorldHandlerDelegateIDE.lambda$instantiateNewWorld$7(WorldHandlerDelegateIDE.java:430) at greenfoot.core.Simulation.runQueuedTasks(Simulation.java:502) at greenfoot.core.Simulation.maybePause(Simulation.java:305) at greenfoot.core.Simulation.runContent(Simulation.java:218) at greenfoot.core.Simulation.run(Simulation.java:211) java.lang.NullPointerException at greenfoot.World.addObject(World.java:412) at MyWorld3.prepare(MyWorld3.java:28) at MyWorld3.<init>(MyWorld3.java:21) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at greenfoot.core.Simulation.newInstance(Simulation.java:617) at greenfoot.platforms.ide.WorldHandlerDelegateIDE.lambda$instantiateNewWorld$7(WorldHandlerDelegateIDE.java:430) at greenfoot.core.Simulation.runQueuedTasks(Simulation.java:502) at greenfoot.core.Simulation.maybePause(Simulation.java:305) at greenfoot.core.Simulation.runContent(Simulation.java:218) at greenfoot.core.Simulation.run(Simulation.java:211) java.lang.NullPointerException at MyWorld3.act(MyWorld3.java:38) at greenfoot.core.Simulation.actWorld(Simulation.java:610) at greenfoot.core.Simulation.runOneLoop(Simulation.java:545) at greenfoot.core.Simulation.runContent(Simulation.java:221) at greenfoot.core.Simulation.run(Simulation.java:211) java.lang.NullPointerException at greenfoot.World.addObject(World.java:412) at MyWorld3.prepare(MyWorld3.java:28) at MyWorld3.<init>(MyWorld3.java:21) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at greenfoot.core.Simulation.newInstance(Simulation.java:617) at greenfoot.platforms.ide.WorldHandlerDelegateIDE.lambda$instantiateNewWorld$7(WorldHandlerDelegateIDE.java:430) at greenfoot.core.Simulation.runQueuedTasks(Simulation.java:502) at greenfoot.core.Simulation.maybePause(Simulation.java:305) at greenfoot.core.Simulation.runContent(Simulation.java:218) at greenfoot.core.Simulation.run(Simulation.java:211) java.lang.NullPointerException at greenfoot.World.addObject(World.java:412) at MyWorld3.prepare(MyWorld3.java:28) at MyWorld3.<init>(MyWorld3.java:21) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at greenfoot.core.Simulation.newInstance(Simulation.java:617) at greenfoot.platforms.ide.WorldHandlerDelegateIDE.lambda$instantiateNewWorld$7(WorldHandlerDelegateIDE.java:430) at greenfoot.core.Simulation.runQueuedTasks(Simulation.java:502) at greenfoot.core.Simulation.maybePause(Simulation.java:305) at greenfoot.core.Simulation.runContent(Simulation.java:218) at greenfoot.core.Simulation.run(Simulation.java:211)
Yehuda Yehuda

2018/5/28

#
You were not supposed to remove the whole line.
danpost wrote...
Remove the first Scoreboard from line 28
Have the following as line 28:
scoreboard = new ScoreBoard();
You need to login to post a reply.