Null pointer exception onvindbaar!

Status
Niet open voor verdere reacties.

rappybas

Gebruiker
Lid geworden
16 mrt 2007
Berichten
47
Hallo, ik heb nadat ik alle code naar verschillende classes(Voor players etc) heb gedaan,
krijg ik een NullException error :o
Ik heb gezocht waar het kon zijn maar heb het echt niet kunnen vinden.
Wie vind de fout? :|
Het spel werkt verder wel op me PC, maar ik vindt de fout niet, en voordat anderen het niet kunnen spelen, wil ik de fout wel oplossen :/
De images laden btw ook, dus dat is niet de fout :)

De error(Ik ben ook al naar de lines geweest waar hij die error geeft, maar zag niks vreemds)
In de GameEngine class heb ik voor jullie ff neergezet waar die line 49 is!
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Topdown.GameEngine.paint(GameEngine.java:49)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:751)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:696)
	at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:676)
	at javax.swing.RepaintManager.access$700(RepaintManager.java:57)
	at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1550)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:602)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

GameEngine.java:
Code:
package Topdown;

import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

public class GameEngine extends JFrame implements KeyListener, MouseListener, MouseMotionListener{
	
	private static final long serialVersionUID = 1L;
	private Graphics graphics;
	private Image image;
	private Image background;
	private AudioClip shoot;
	private Player OPlayer;
	public int mouseX = 0;
	public int mouseY = 0;
	private Image character;
	
	public GameEngine(){
		setTitle("Topdown Zombie Shooter");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(640, 480);
		setResizable(false);
		setBackground(Color.BLACK);
		setVisible(true);
		addKeyListener(this);
		addMouseListener(this);
		addMouseMotionListener(this);
	
		background = Loader.LoadImage("Grass.png");
		shoot = Loader.LoadSound("Shoot.wav");
		character = Loader.LoadImage("Player.png");
		OPlayer = new Player(character);
	}
	
	public void paint(Graphics g){
		image = createImage(640, 480);
		graphics = image.getGraphics();

		graphics.drawImage(background, 0, 0, null);
		/*----------> LINE 49!!!*/OPlayer.DrawPlayer(graphics);
		OPlayer.Update(mouseY, mouseX);
		
		g.drawImage(image, 1, 29, null);
		repaint();
	}
	
	public static void main(String[] args){
		new GameEngine();
	}

	@Override
	public void keyPressed(KeyEvent e) {
		if(e.getKeyCode() == KeyEvent.VK_W){
			OPlayer.moveUp = true;
		}
		if(e.getKeyCode() == KeyEvent.VK_S){
			OPlayer.moveDown = true;
		}
		if(e.getKeyCode() == KeyEvent.VK_A){
			OPlayer.moveLeft = true;
		}
		if(e.getKeyCode() == KeyEvent.VK_D){
			OPlayer.moveRight = true;
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {
		if(e.getKeyCode() == KeyEvent.VK_W){
			OPlayer.moveUp = false;
		}
		if(e.getKeyCode() == KeyEvent.VK_S){
			OPlayer.moveDown = false;
		}
		if(e.getKeyCode() == KeyEvent.VK_A){
			OPlayer.moveLeft = false;
		}
		if(e.getKeyCode() == KeyEvent.VK_D){
			OPlayer.moveRight = false;
		}
		
	}

	@Override
	public void keyTyped(KeyEvent e) {
		;
	}

	@Override
	public void mouseClicked(MouseEvent m) {
		;
	}

	@Override
	public void mouseEntered(MouseEvent m) {
		;
	}

	@Override
	public void mouseExited(MouseEvent m) {
		;
	}

	@Override
	public void mousePressed(MouseEvent m) {
		if (m.getButton() == MouseEvent.BUTTON1){
			shoot.play();
		}
	}

	@Override
	public void mouseReleased(MouseEvent m) {
		;
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		mouseX = e.getX();
		mouseY = e.getY();
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		mouseX = e.getX();
		mouseY = e.getY();
	}

}

Player.java:
Code:
package Topdown;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.*;

public class Player {
	private double direction = 0;
	private Image image;
	private BufferedImage playerdirection;
	public boolean moveLeft;
	public boolean moveRight;
	public boolean moveUp;
	public boolean moveDown;
	private double x = 320-16;
	private double y = 240-16;
	
	public Player(Image fil){
		image = fil;
	}
	
	public void Update(int my, int mx){
		direction = 180+Math.atan2(y+64-my,x+32-mx)*180.0/Math.PI;
		
		if(moveDown == true){
			y += 0.5;
		}
		if(moveRight == true){
			x += 0.5;
		}
		if(moveLeft == true){
			x -= 0.5;
		}
		if(moveUp == true){
			y -= 0.5;
		}
	}
	
	public void DrawPlayer(Graphics g){
		playerdirection = new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB);
		Graphics p = playerdirection.getGraphics();
		p.drawImage(image, 16, 16, null);
		
		AffineTransform rot = new AffineTransform();
		rot.rotate(Math.toRadians(direction), 32, 32);
		AffineTransformOp fix = new AffineTransformOp(rot, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
		playerdirection = fix.filter(playerdirection, null);
		
		g.drawImage(playerdirection, (int) x, (int) y, null);
	}
	
	public int CenterX(){
		return (int) x+32;
	}
	
	public int CenterY(){
		return (int) y+64;
	}

}

Loader.java:
Code:
package Topdown;

import java.applet.AudioClip;
import java.awt.Image;
import java.awt.Toolkit;

final class Loader {
	static Image LoadImage(String img){
		return Toolkit.getDefaultToolkit().getImage(Thread.currentThread().getContextClassLoader().getResource(img));
	}
	
	static AudioClip LoadSound(String snd){
		return java.applet.Applet.newAudioClip(Thread.currentThread().getContextClassLoader().getResource(snd));
	}
}

Groeten Bas :o
 
Laatst bewerkt:
Je OPlayer moet wel null zijn als ik het zo zie, misschien wordt de paint methode aangeroepen terwijl je constructor nog niet afgerond is. Probeer de "new" van de Oplayer eens bovenin de contructor te zetten, dus zo:

[JS]
public GameEngine(){
background = Loader.LoadImage("Grass.png");
shoot = Loader.LoadSound("Shoot.wav");
character = Loader.LoadImage("Player.png");
OPlayer = new Player(character);

setTitle("Topdown Zombie Shooter");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(640, 480);
setResizable(false);
setBackground(Color.BLACK);
setVisible(true);
addKeyListener(this);
addMouseListener(this);
addMouseMotionListener(this);
}
[/JS]
 
Aha, dat was het dus!
Hij werkt nu :D
Superbedankt, nu kan ik weer verder :)

Dankjewel:thumb:
 
Voor alle duidelijkheid: setVisible() roept paint() aan. Dus kan je ook beter bv. je background toevoegen voor setVisible(). Anders moet de paint al meteen weer aangesproken worden. Zet setVisible() altijd achteraan in de constructor.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan