Gra w Javie, nie rysuje, null pointer exception

0

Witajcie,
każą mi pisać gry, a jestem całkowitym noobem w programowaniu, ale piszę. Jest problem w ruszeniu apki po umieszczeniu w kodzie animacji ruchu obiektu... Wykazuje mi taki błąd(a później lawina z nim związana):

 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at pakiet.panel.paintComponent(panel.java:147)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JLayeredPane.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
	at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
	at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
	at java.awt.Container.paint(Unknown Source)
	at java.awt.Window.paint(Unknown Source)
	at javax.swing.RepaintManager$4.run(Unknown Source)
	at javax.swing.RepaintManager$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.access$1300(Unknown Source)
	at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
        ...itd.

Odwołanie błędu jest do tej linijki(funkcji):

        for(int i=0;i<fbomba.length;i++)
        {
            fbomba[i].calculatePathPos(param.MoveMODE);
            if(!fbomba[i].hit)
                g.drawImage
                (
                		fbomba[i].icon,
                		fbomba[i].currX,
                		sHeight-fbomba[i].currY,
                		(int)(fbomba[i].icon.getWidth(null)*(1.0-fbomba[i].currY/(double)sHeight)), 
                		(int)(fbomba[i].icon.getHeight(null)*(1.0-fbomba[i].currY/(double)sHeight)),
                		null
                );
        }

Która to znajduje się w klasie Fallout:

	
public class Fallout 
{
	    /** Zmienne */
	    public int x;
	    /** Początkowa współrzędna y obiektu */
	    public int y;
	    /** Aktualna współrzędna x obiektu */
	    public int currX;
	    /** Aktualna współrzędna y obiektu */
	    public int currY;
	    /** Szerokość ikony obiektu  */
	    public int width;
	    /** Wysokość ikony obiektu */
	    public int height;
	    /** Krok przesunięcia obiektu z góry do dołu*/
	    public int dy;
	    public int rodzajbomby;
	    /** Szerokość pola graficznego*/
	    public int sWidth;
	    /** Wysokość pola graficznego*/
	    public int sHeight;
	    /** Czy trafiono bombe */
	    public boolean hit;
	    /** Ikona obiektu - bomby */
	    public Image icon;
	        
            public void calculatePathPos(int mode)
	    {
	        int tmpX=0;

	                   currY=currY+dy;
	                   if(currY>sHeight) 
	                   { 
	                       currY=0;
	                   }
	                   tmpX=0;
	                   currX=x+tmpX;   
	        
	        
	    }//calculatePathPos()

Funkcja mode służy do określenia czy obiekt(bomba) się porusza, czy też nie(0-1). Próbowałem zmienić typ MoveMode na boolean z inta, ale to nic nie daje.

Ogólnie błąd jest przy funkcji rysowania, czyli:

	
     /*   Zmienne */
     public int shiftBL;
    public status gStatus;
    public int barHeight;
    /* Tablica obiektów pierwszego planu - bomby*/
    private Fallout [] fbomba;
    
	private static final long serialVersionUID = 1L;
	/** Szerokość pola graficznego gry*/
    public int sWidth;
    /** Wysokość pola graficznego gry*/
    public int sHeight;
    /** Liczba obiektów w linii */
    public int objectsInLine=4;
    public status gstatus;
    public cannon pcannon;

     //i funkcja 
     protected void paintComponent(Graphics gs) 
    {
        Graphics2D g=(Graphics2D)gs;
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        g.drawImage(param.bgImage, 0, 0, null);
        //g.drawImage(param.cannon,pozx-110,545,null);

        for(int i=0;i<fbomba.length;i++)
        {
            fbomba[i].calculatePathPos(param.MoveMODE);
            if(!fbomba[i].hit)
                g.drawImage
                (
                		fbomba[i].icon,
                		fbomba[i].currX,
                		sHeight-fbomba[i].currY,
                		(int)(fbomba[i].icon.getWidth(null)*(1.0-fbomba[i].currY/(double)sHeight)), 
                		(int)(fbomba[i].icon.getHeight(null)*(1.0-fbomba[i].currY/(double)sHeight)),
                		null
                );
        }

Obrazki wczytuję osobną klasą:

public class param 
{
    public static int MoveMODE=1;
    /** Zmienna pomocnicza określająca maksymalną liczę obiektów pierwszego planu */
    public static int noOfObjects=12;
    /** Szerokość pola graficznego gry */
    public static int gWidth=1024;
    /** Wysokość pola graficznego gry */
    public static int gHeight=768;
    public static Image[] bomba;
    public static BufferedImage cannon;
	public static void zaladujobrazy() 
	{

        cannon= new BufferedImage(181, 158, BufferedImage.TYPE_INT_RGB);
        File urlcannon= new File("img/dzialo.png");
        try 
        {
			cannon = ImageIO.read(urlcannon);
        } catch (IOException e) 
		{
			e.printStackTrace();
		}
        bomba= new Image[4];
        bomba[0]=loadImage("images/bomba0.png");
        bomba[1]=loadImage("images/bomba1.png");
        bomba[2]=loadImage("images/bomba2.png");
        bomba[3]=loadImage("images/bomba3.png");
	    bgImage=loadImage("img/screen.png");
	    menuImage=loadImage("img/pausescreen.png");
	    menuGameImage=loadImage("img/pausescreen.png");
	    cursorImage=loadImage("img/target.png");
	}
	public static Image loadImage(String fileName) 
	{
	    return new ImageIcon(fileName).getImage();
	}
}
0

Obstawiam, że nullem jest fbomba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1