Getting a null pointer exception with getWorld().addObject()
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.ArrayList;
import java.util.Arrays;
/**
* Write a description of class Card here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Card extends Actor
{
ArrayList <String> cardList = new ArrayList <String> (Arrays.asList("1R", "1G", "1B", "1Y", "2R", "2G", "2B", "2Y", "3R", "3G", "3B", "3Y", "4R", "4G", "4B", "4Y", "5R", "5G", "5B", "5Y", "6R", "6G", "6B", "6Y", "7R", "7G", "7B", "7Y", "8R", "8G", "8B", "8Y", "9R", "9G", "9B", "9Y", "0R", "0G", "0B", "0Y", "RevR", "RevG", "RevB", "RevY", "SR", "SG", "SB", "SY", "+2R", "+2G", "+2B", "+2Y", "Wild", "+4", "1R", "1G", "1B", "1Y", "2R", "2G", "2B", "2Y", "3R", "3G", "3B", "3Y", "4R", "4G", "4B", "4Y", "5R", "5G", "5B", "5Y", "6R", "6G", "6B", "6Y", "7R", "7G", "7B", "7Y", "8R", "8G", "8B", "8Y", "9R", "9G", "9B", "9Y", "0R", "0G", "0B", "0Y", "RevR", "RevG", "RevB", "RevY", "SR", "SG", "SB", "SY", "+2R", "+2G", "+2B", "+2Y", "Wild", "Wild", "Wild", "+4", "+4", "+4"));
ArrayList <String> playerOneHand = new ArrayList <String> ();
ArrayList <String> playerTwoHand = new ArrayList <String> ();
ArrayList <String> playerThreeHand = new ArrayList <String> ();
ArrayList <String> playerFourHand = new ArrayList <String> ();
ArrayList <String> revCards = new ArrayList <String> (Arrays.asList("RevR.png", "RevG.png", "RevB.png", "RevY.png"));
ArrayList <String> skipCards = new ArrayList <String> (Arrays.asList("SR.png", "SG.png", "SB.png", "SY.png"));
ArrayList <String> plusTwoCards = new ArrayList <String> (Arrays.asList("+2R.png", "+2G.png", "+2B.png", "+2Y.png"));
int playerTurn = 0;
int numCardsHand = 0;
int numCardsHand2 = 0;
int turnOrder = 1;
/**
* Act - do whatever the Card wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
ifClicked();
}
/**
* ifClicked - When clicked, places cards in middle
*/
public void ifClicked()
{
if (playerTurn == 1)
{
String clickedImage = getClickedImage();
if (Greenfoot.mouseClicked(this))
{
if (revCards.contains(clickedImage))
{
turnOrder = -1;
}
else if (skipCards.contains(clickedImage))
{
playerTurn ++;
}
else if (plusTwoCards.contains(clickedImage))
{
for (int i = 0; i < 2; i++)
{
addCardTwo();
}
}
else if (clickedImage == "+4")
{
}
else if (clickedImage == "Wild")
{
}
else
{
}
setLocation(350, 225);
playerOneHand.remove(clickedImage);
numCardsHand --;
playerTurn = playerTurn + turnOrder;
}
}
}
/**
* setGameScreen - Adds card and deck objects when player buttons are clicked
*/
public void setGameScreen()
{
while (numCardsHand < 7)
{
addCardOne();
addCardTwo();
numCardsHand ++;
numCardsHand2 ++;
}
}
/**
* updateTurn - Updates turn number if > 4 or < 1
*/
public void updateTurn()
{
if (playerTurn == 5)
{
playerTurn = 1;
}
if (playerTurn == 0)
{
playerTurn = 4;
}
}
/**
* checkWin - Check if player has won
*/
public void checkWin()
{
if (playerOneHand.isEmpty())
{
Instructions instruct = new Instructions("one win");
getWorld().addObject(instruct, 400, 225);
getWorld().removeObjects(getWorld().getObjects(Card.class));
getWorld().removeObjects(getWorld().getObjects(Deck.class));
Greenfoot.stop();
}
if (playerTwoHand.isEmpty())
{
Instructions instruct = new Instructions("one lose");
getWorld().addObject(instruct, 400, 225);
getWorld().removeObjects(getWorld().getObjects(Card.class));
getWorld().removeObjects(getWorld().getObjects(Deck.class));
Greenfoot.stop();
}
}
/**
* addCardOne - Adds random card to player one
*/
public void addCardOne()
{
String chooseCard = cardList.get(Greenfoot.getRandomNumber(cardList.size()));
playerOneHand.add(chooseCard);
cardList.remove(chooseCard);
Card card1 = new Card();
card1.setImage(chooseCard + ".png");
getWorld().addObject(card1, (numCardsHand*55) + (getWorld().getHeight()/4), 410);
}
/**
* addCardtTwo - Adds random card to player two
*/
public void addCardTwo()
{
String chooseCard = cardList.get(Greenfoot.getRandomNumber(cardList.size()));
playerThreeHand.add(chooseCard);
cardList.remove(chooseCard);
Card card2 = new Card();
card2.setImage("Back.png");
getWorld().addObject(card2, (numCardsHand*55) + (getWorld().getHeight()/4), 40);
}
/**
* getClickedImage - get image of clicked card
*/
public String getClickedImage()
{
if (Greenfoot.mouseClicked(this))
{
String name = getImage().toString();
String[] names = name.split("name: ");
String nameRefined = names[1].split(" Ima")[0];
return nameRefined;
}
return null;
}
}
