NullPointer Exception ohne Sinn

Developer_X

Top Contributor
Hi, ich habe eine Klasse, in der gibt es eine Methode, die mir etwas auf mein JPanel zeichnet, sie nimmt sich ein paar koordinaten aus einem Array, einem Vector2D array, diese Klasse habe ich selbstgeschrieben:
Java:
package math;

public class Vector2D 
{
//	Attributes
	double x = 0;
	double y = 0;
	
	public Vector2D(double x, double y)
	{
		this.x = x;
		this.y = y;
	}
	
	public int getX()
	{
		return (int) x;
	}
	public int getY()
	{
		return (int) y;
	}
	
	public int getDistance(Vector2D vec_01)
	{
		int distance = 0;

		double a = vec_01.getX()-x;
		double b = vec_01.getY()-y;
		
		distance = (int) (Math.pow(a, 2) + Math.pow(b, 2));
		distance = (int) Math.sqrt(distance);

		return distance;
	}
}
Dann gibt es da noch eine methode namens init(), die diese Arrays erstellt, also dass sie nicht mehr null sind. Diese Methode wird im Constructor gestartet, bevor das JPanel an ein JFrame geadded wird, trotz all dem, geht das ganze nicht, es wird immer wieder darauf verviewesen, dass von einem Vector, das mit dem getX() = null ist. Wieso?
Java:
public class Game extends JFrame
{
	Vector2D[] BulletPoint = new Vector2D[bullets];
	Vector2D[] StartPoint = new Vector2D[bullets];
	public void init()
	{
		IndianVector = new Vector2D(width/2,height/2);
		int i = 0;
		while(i<bullets)
		{
			shot[i] = false;
			StartPoint[i]  = new Vector2D(0,0);
        	BulletPoint[i] = new Vector2D(-3,-3);
			i++;
		}
	}
}
	public Game()
	{

		init();
             //...
JPanel mainPanel = new JPanel()
		{
			public void paintComponent(Graphics g)
			{
				drawGame((Graphics2D)g);
			}
		};
		add(mainPanel,"Center");

	// ...
	}
	public void drawGame(Graphics2D g)
	{
		g.setColor(Color.green);
		int i = 0;
		while(i<bullets)
		{	
			g.drawLine(BulletPoint[i].getX(),BulletPoint[i].getY(),BulletPoint[i].getX()+arrow_lenght,BulletPoint[i].getY());
			i++;
		}
	}
Immer wieder wird mir gesagt, dass das hier null ist:
Code:
g.drawLine(BulletPoint[i].getX() /** das da */,...
Was mache ich denn falsch?

Er wirft immer wieder eine nullPointerException
 

System.exit(0)

Aktives Mitglied
Hallo,

ich sehe nirgendwo, dass bullets ein Wert zugeordnet wird.

Somit ist Zeile 9 in der Klasse Game immer False und es wird kein BulletPoint initialisiert.

Gruß

System.exit(0)
 
S

Spacerat

Gast
...Und Thementitel ohne Sinn...
Wenn dir dein Programm eine NPE spendiert, hat das IMMER Sinn. Hier bekommst du die, weil möglicherweise drawGame vor init aufgerufen wird. Da dies ein Umstand ist, den du nicht ändern kannst, fang die Exception mit 'ner Abfrage ab ([c]if(null != sonnstwas) tuwas();[/c]).
@System.exit(0): ...oder das... (natürlich!). Hatte den Aufruf von [c]init()[/c] übersehen, und deswegen angenommen das der JPanel geadded und auch angezeigt wird, noch bevor [c]init();[/c] irgendwo aufgerufen wird :oops:
 
Zuletzt bearbeitet von einem Moderator:

Developer_X

Top Contributor
also, ich hab bullets mal weggelassen, bullets ist ein integer, er ist bei der Variablen liste:
Java:
public class Game extends JFrame
{
    int bullets = 10;
    Vector2D[] BulletPoint = new Vector2D[bullets];
    Vector2D[] StartPoint = new Vector2D[bullets];
    public void init()
    {
        IndianVector = new Vector2D(width/2,height/2);
        int i = 0;
        while(i<bullets)
        {
            shot[i] = false;
            StartPoint[i]  = new Vector2D(0,0);
            BulletPoint[i] = new Vector2D(-3,-3);
            i++;
        }
    }
}
    public Game()
    {
 
        init();
             //...
JPanel mainPanel = new JPanel()
        {
            public void paintComponent(Graphics g)
            {
                drawGame((Graphics2D)g);
            }
        };
        add(mainPanel,"Center");
 
    // ...
    }
    public void drawGame(Graphics2D g)
    {
        g.setColor(Color.green);
        int i = 0;
        while(i<bullets)
        {   
            g.drawLine(BulletPoint[i].getX(),BulletPoint[i].getY(),BulletPoint[i].getX()+arrow_lenght,BulletPoint[i].getY());
            i++;
        }
    }
 

Developer_X

Top Contributor
also, ich zeig euch mal meinen kompletten ganzen Code, ungekürzt.
Er besteht aus 2 Klassen, die Klasse Game oben, heißt eigentlich Level_01:
Level_01
Java:
package levels;

import java.awt.*;
import java.awt.event.*;
import math.*;

@SuppressWarnings("serial")
public class Level_01 extends GameFrame
{
//	Attribute
	Indian indian = new Indian();
	Vector2D IndianVector = new Vector2D(width/2,height/2);
	boolean sitting = false;
	double winkel = 0;
	int bulletSpeed = 20;
	int bullets = 10;
	int actual_bullet = 0;
	int arrow_lenght = 50;
	
	Vector2D[] BulletPoint = new Vector2D[bullets];
	Vector2D[] StartPoint = new Vector2D[bullets];
	int[] radius = new int[bullets];
	int[] ziel = new int[bullets];
	double[] shotWinkel = new double[bullets];
	boolean[] shot = new boolean[bullets];

//	Methodic with Override
	public void doThread()
	{
		move();
		math();
		actualize();
	}
	public void actualize()
	{
		s.sleep(10);
		repaint();
	}
	public void init()
	{
		IndianVector = new Vector2D(width/2,height/2);
		int i = 0;
		while(i<bullets)
		{
			shot[i] = false;
			StartPoint[i]  = new Vector2D(0,0);
        	BulletPoint[i] = new Vector2D(-3,-3);
			i++;
		}
	}
	public void load()
	{
		
	}
	public void move()
	{
		if(left)
		{
			IndianVector = new Vector2D(IndianVector.getX()-1,IndianVector.getY());
			indian.walk();
			indian.moveLeft();
		}
		if(right)
		{
			IndianVector = new Vector2D(IndianVector.getX()+1,IndianVector.getY());
			indian.walk();
			indian.moveRight();
		}
		if(!left&&!right)
		{
			indian = new Indian();
			indian.stopWalking();
		}
	}
	public void mouseClicked(MouseEvent arg0)
	{
		if(arg0.getButton()==1)
		{
			sp.play("Indian_Shot");
				
			ziel[actual_bullet] = (int) new Vector2D(BulletPoint[actual_bullet].getX(),BulletPoint[actual_bullet].getY()).getDistance(new Vector2D(arg0.getX(),arg0.getY()));
			StartPoint[actual_bullet] = IndianVector;
			shot[actual_bullet] = true;
			shotWinkel[actual_bullet] = winkel;

			if(actual_bullet==9)
			{
				actual_bullet = 0;
			}
			else
			{
				actual_bullet++; 
			}
		}
	}
	public void drawGame(Graphics2D g)
	{
		g.setColor(Color.green);
		int i = 0;
		while(i<bullets)
		{	
			g.drawLine(BulletPoint[i].getX(),BulletPoint[i].getY(),BulletPoint[i].getX()+arrow_lenght,BulletPoint[i].getY());
			i++;
		}
		indian.drawIndian(g, IndianVector);
	}
	public void math()
	{
		double x = (mouseX - IndianVector.getX()) / (double) width;
        double y = (mouseY - IndianVector.getY()) / (double) height;
        winkel = (Math.PI * ((y < 0)? 1 : 2) - Math.atan(x / y)); 
        
        indian.setBogenRot(winkel);
        
		int i = 0;
		while(i<bullets)
		{
			if(shot[i])
			{
				if(radius[i]+bulletSpeed<=ziel[i])
				{
					radius[i]+=bulletSpeed;
				}
				else
				{
					radius[i] = 0;
					shotWinkel[i] = 0;
					shot[i] = false;
				}
			}
			i++;
		}
	}
	public static void main(String[]args)
	{
		new Level_01();
	}
}
Game_Frame
Java:
package levels;

import javax.swing.*;
import producer.*;
import sound.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.GeneralPath;

@SuppressWarnings("serial")
public class GameFrame extends JFrame implements Runnable, 
												MouseMotionListener,MouseWheelListener,MouseListener, 
		FocusListener, 
							WindowListener, 
								KeyListener
{
//	Attributes
	Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	system.System s = new system.System();
	SoundPlayer sp = new SoundPlayer();
	StringProducer st = new StringProducer();
	GradientPaint gp;
	AlphaComposite ap;
	Thread thread;
	
	int width  = d.width;
	int height = d.height;
	int mouseX = 0;
	int mouseY = 0;
	
	boolean left,right,up,down;
	boolean gameRunning = true;
	
//	Konstruktor
	public GameFrame()
	{
		load();
		
		setSize(d);
		init();

		setUndecorated(true);
		setLayout(new BorderLayout());
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		JPanel mainPanel = new JPanel()
		{
			public void paintComponent(Graphics g)
			{
				s.supportGraphics((Graphics2D)g);
				drawGame((Graphics2D)g);
				drawCursor((Graphics2D)g);
			}
		};
		s.setNullCursor(mainPanel);
		mainPanel.addMouseListener(this);
		mainPanel.addMouseMotionListener(this);
		mainPanel.addKeyListener(this);
		add(mainPanel,"Center");
		
		addWindowListener(this);
		addFocusListener(this);
		addKeyListener(this);

		thread = new Thread(this);
		thread.start();
		
		setVisible(true);
	}
	
//	Methoden zum Overriden
	public void doThread()
	{
	}
	public void drawGame(Graphics2D g)
	{
		
	}
	public void drawCursor(Graphics2D g)
	{
		GeneralPath gp = new GeneralPath();
		gp.moveTo(mouseX,mouseY);
		gp.lineTo(mouseX+25,mouseY+25);
		gp.lineTo(mouseX+12,mouseY+34);
		gp.lineTo(mouseX,mouseY);

	//  Draw Shadow
		g.setColor(Color.darkGray);
		ap = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f);
		g.setComposite(ap);
		g.translate(-10,+10);
		g.fill(gp);
		g.draw(gp);
		g.translate(+10,-10);
		ap = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f);
		g.setComposite(ap);
		
	//  Draw Cursor
		g.setColor(new Color(225,158,108));
		g.fill(gp);
		g.draw(gp);
		g.setColor(Color.black);
		g.drawLine(mouseX,mouseY,mouseX+25,mouseY+25);
		g.drawLine(mouseX+12,mouseY+34,mouseX+25,mouseY+25);
		g.drawLine(mouseX,mouseY,mouseX+12,mouseY+34);
	}
	public void init()
	{
		
	}
	public void load()
	{
		
	}
	public void keyPressWatch(KeyEvent arg0)
	{
		
	}
	public void keyReleaseWatch(KeyEvent arg0)
	{
		
	}
	
//	Implementationen
	public void run() 
	{
		while(true)
		{
			while(gameRunning)
			{
				doThread();
			}
			repaint();
		}
	}
	
	public void mouseDragged(MouseEvent arg0) 
	{
		mouseX = arg0.getX();
		mouseY = arg0.getY();
	}
	public void mouseMoved(MouseEvent arg0) 
	{
		mouseX = arg0.getX();
		mouseY = arg0.getY();
	}
	
	public void mouseClicked(MouseEvent arg0)
	{
	}
	public void mouseEntered(MouseEvent arg0)
	{
	}
	public void mouseExited(MouseEvent arg0) 
	{
	}
	public void mousePressed(MouseEvent arg0) 
	{
	}
	public void mouseReleased(MouseEvent arg0)
	{
	}

	public void focusGained(FocusEvent arg0)
	{
	}
	public void focusLost(FocusEvent arg0) 
	{
		gameRunning = false;
	}

	public void windowActivated(WindowEvent arg0) 
	{
	}
	public void windowClosed(WindowEvent arg0)
	{
	}
	public void windowClosing(WindowEvent arg0) 
	{
		System.exit(0);
	}
	public void windowDeactivated(WindowEvent arg0)
	{
	}
	public void windowDeiconified(WindowEvent arg0)
	{
	}
	public void windowIconified(WindowEvent arg0)
	{
	}
	public void windowOpened(WindowEvent arg0) 
	{
	}
	
	public void keyPressed(KeyEvent arg0) 
	{
		if(arg0.getKeyCode()==KeyEvent.VK_UP)
		{
			up = true;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
		{
			down = true;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
		{
			left = true;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			right = true;
		}
		
		if(arg0.getKeyCode()==KeyEvent.VK_SPACE)
		{
			if(!gameRunning)
				gameRunning = true;
		}
		keyPressWatch(arg0);
	}
	public void keyReleased(KeyEvent arg0) 
	{
		if(arg0.getKeyCode()==KeyEvent.VK_UP)
		{
			up = false;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
		{
			down = false;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
		{
			left = false;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			right = false;
		}
		
		keyReleaseWatch(arg0);
	}
	public void keyTyped(KeyEvent arg0) 
	{
	}
	
	public void mouseWheelMoved(MouseWheelEvent arg0)
	{
	}
//	Main
	public static void main(String[]args)
	{
		new GameFrame();
	}
}
 

Landei

Top Contributor
SpaceRat hat's doch schon gesagt:

Solange init() noch nicht aufgerufen wurde, stehen in BulletPoint lauter null-Referenzen rum. Entweder du stellst sicher, dass init vor drawGame aufgerufen wird, oder du testest das einfach vorher ab:
Java:
        while(i<bullets)
        {   
            if(BulletPoint[i] != null) {
               g.drawLine(BulletPoint[i].getX(),BulletPoint[i].getY(),BulletPoint[i].getX()+arrow_lenght,BulletPoint[i].getY());
            } 
            i++;
        }

Ich würde übrigens hier for statt while nehmen, aber falsch ist es natürlich nicht, nur umständlicher.
 

Developer_X

Top Contributor
SpaceRat hat's doch schon gesagt:

Solange init() noch nicht aufgerufen wurde, stehen in BulletPoint lauter null-Referenzen rum. Entweder du stellst sicher, dass init vor drawGame aufgerufen wird, oder du testest das einfach vorher ab:
Java:
        while(i<bullets)
        {   
            if(BulletPoint[i] != null) {
               g.drawLine(BulletPoint[i].getX(),BulletPoint[i].getY(),BulletPoint[i].getX()+arrow_lenght,BulletPoint[i].getY());
            } 
            i++;
        }

Ich würde übrigens hier for statt while nehmen, aber falsch ist es natürlich nicht, nur umständlicher.

OK, also, das heißt, wenn draw zuerst aufgerufen wird, aber danach irgendwann init, dann würden die pfeile dann gezeichnet?
ok
und mit for ginge es dann doch so oder:
Java:
        for(int i = 0; i<bullets; i++ )
        {   
            if(BulletPoint[i] != null) {
               g.drawLine(BulletPoint[i].getX(),BulletPoint[i].getY(),BulletPoint[i].getX()+arrow_lenght,BulletPoint[i].getY());
            } 
        }
DEveloper_X
 

Developer_X

Top Contributor
jetzt kommt noch ne exception, schaut mal, ich habe in die init methode mal ein System out println eingebaut, schaut mal welches zuerst aufgerufen wird, init oder draw.
Bei mir konnt zuerst init()
aber das problem das selbe, schaut euchs noch mal an, ich hab jetzt auch for schleifen genutzt
Java:
package levels;

import javax.swing.*;
import producer.*;
import sound.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.GeneralPath;

@SuppressWarnings("serial")
public class GameFrame extends JFrame implements Runnable, 
												MouseMotionListener,
												MouseWheelListener,
												MouseListener, 
												FocusListener, 
												WindowListener, 
												KeyListener
{
//	Attributes
	Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	system.System s = new system.System();
	SoundPlayer sp = new SoundPlayer();
	StringProducer st = new StringProducer();
	GradientPaint gp;
	AlphaComposite ap;
	Thread thread;
	
	int width  = d.width;
	int height = d.height;
	int mouseX = 0;
	int mouseY = 0;
	
	boolean left,right,up,down;
	boolean gameRunning = true;
	
//	Konstruktor
	public GameFrame()
	{
		start();
	}
	public void start()
	{
		setUndecorated(true);
		setSize(d);		
		load();
		init();

		setLayout(new BorderLayout());
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		JPanel mainPanel = new JPanel()
		{
			public void paintComponent(Graphics g)
			{
				s.supportGraphics((Graphics2D)g);
				drawGame((Graphics2D)g);
				drawCursor((Graphics2D)g);
			}
		};
		s.setNullCursor(mainPanel);
		mainPanel.addMouseListener(this);
		mainPanel.addMouseMotionListener(this);
		mainPanel.addKeyListener(this);
		add(mainPanel,"Center");
		
		addWindowListener(this);
		addFocusListener(this);
		addKeyListener(this);

		thread = new Thread(this);
		thread.start();
		
		setVisible(true);
	}
//	Methoden zum Overriden
	public void doThread()
	{
	}
	public void drawGame(Graphics2D g)
	{
	}
	public void drawCursor(Graphics2D g)
	{
		GeneralPath gp = new GeneralPath();
		gp.moveTo(mouseX,mouseY);
		gp.lineTo(mouseX+25,mouseY+25);
		gp.lineTo(mouseX+12,mouseY+34);
		gp.lineTo(mouseX,mouseY);

	//  Draw Shadow
		g.setColor(Color.darkGray);
		ap = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f);
		g.setComposite(ap);
		g.translate(-10,+10);
		g.fill(gp);
		g.draw(gp);
		g.translate(+10,-10);
		ap = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f);
		g.setComposite(ap);
		
	//  Draw Cursor
		g.setColor(new Color(225,158,108));
		g.fill(gp);
		g.draw(gp);
		g.setColor(Color.black);
		g.drawLine(mouseX,mouseY,mouseX+25,mouseY+25);
		g.drawLine(mouseX+12,mouseY+34,mouseX+25,mouseY+25);
		g.drawLine(mouseX,mouseY,mouseX+12,mouseY+34);
	}
	public void init()
	{
		
	}
	public void load()
	{
		
	}
	public void keyPressWatch(KeyEvent arg0)
	{
		
	}
	public void keyReleaseWatch(KeyEvent arg0)
	{
		
	}
	
//	Implementationen
	public void run() 
	{
		while(true)
		{
			while(gameRunning)
			{
				doThread();
			}
			repaint();
		}
	}
	
	public void mouseDragged(MouseEvent arg0) 
	{
		mouseX = arg0.getX();
		mouseY = arg0.getY();
	}
	public void mouseMoved(MouseEvent arg0) 
	{
		mouseX = arg0.getX();
		mouseY = arg0.getY();
	}
	
	public void mouseClicked(MouseEvent arg0)
	{
	}
	public void mouseEntered(MouseEvent arg0)
	{
	}
	public void mouseExited(MouseEvent arg0) 
	{
	}
	public void mousePressed(MouseEvent arg0) 
	{
	}
	public void mouseReleased(MouseEvent arg0)
	{
	}

	public void focusGained(FocusEvent arg0)
	{
	}
	public void focusLost(FocusEvent arg0) 
	{
		gameRunning = false;
	}

	public void windowActivated(WindowEvent arg0) 
	{
	}
	public void windowClosed(WindowEvent arg0)
	{
	}
	public void windowClosing(WindowEvent arg0) 
	{
		System.exit(0);
	}
	public void windowDeactivated(WindowEvent arg0)
	{
	}
	public void windowDeiconified(WindowEvent arg0)
	{
	}
	public void windowIconified(WindowEvent arg0)
	{
	}
	public void windowOpened(WindowEvent arg0) 
	{
	}
	
	public void keyPressed(KeyEvent arg0) 
	{
		if(arg0.getKeyCode()==KeyEvent.VK_UP)
		{
			up = true;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
		{
			down = true;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
		{
			left = true;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			right = true;
		}
		
		if(arg0.getKeyCode()==KeyEvent.VK_SPACE)
		{
			if(!gameRunning)
				gameRunning = true;
		}
		keyPressWatch(arg0);
	}
	public void keyReleased(KeyEvent arg0) 
	{
		if(arg0.getKeyCode()==KeyEvent.VK_UP)
		{
			up = false;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
		{
			down = false;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
		{
			left = false;
		}
		if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			right = false;
		}
		
		keyReleaseWatch(arg0);
	}
	public void keyTyped(KeyEvent arg0) 
	{
	}
	
	public void mouseWheelMoved(MouseWheelEvent arg0)
	{
	}
//	Main
	public static void main(String[]args)
	{
		new GameFrame();
	}
}

Java:
package levels;

import java.awt.*;
import java.awt.event.*;
import math.*;

@SuppressWarnings("serial")
public class Level_01 extends GameFrame
{
//	Attribute
	Indian indian = new Indian();
	Vector2D IndianVector = new Vector2D(width/2,height/2);
	boolean sitting = false;
	double winkel = 0;
	int bulletSpeed = 20;
	int bullets = 10;
	int actual_bullet = 0;
	int arrow_lenght = 50;
	
	Vector2D[] BulletPoint = new Vector2D[bullets];
	Vector2D[] StartPoint = new Vector2D[bullets];
	int[] radius = new int[bullets];
	int[] ziel = new int[bullets];
	double[] shotWinkel = new double[bullets];
	boolean[] shot = new boolean[bullets];

	public Level_01()
	{
		start();
	}
//	Methodic with Override
	public void doThread()
	{
		move();
		math();
		actualize();
	}
	public void actualize()
	{
		s.sleep(10);
		repaint();
	}
	public void init()
	{
		System.out.println("init();");
		IndianVector = new Vector2D(width/2,height/2);
		for(int i = 0; i<bullets; i++)
		{
			shot[i] = false;
			StartPoint[i]  = new Vector2D(0,0);
        	BulletPoint[i] = new Vector2D(-3,-3);
		}
	}
	public void load()
	{
		
	}
	public void move()
	{
		if(left)
		{
			IndianVector = new Vector2D(IndianVector.getX()-1,IndianVector.getY());
			indian.walk();
			indian.moveLeft();
		}
		if(right)
		{
			IndianVector = new Vector2D(IndianVector.getX()+1,IndianVector.getY());
			indian.walk();
			indian.moveRight();
		}
		if(!left&&!right)
		{
			indian = new Indian();
			indian.stopWalking();
		}
	}
	public void mouseClicked(MouseEvent arg0)
	{
		if(arg0.getButton()==1)
		{
			sp.play("Indian_Shot");
				
			ziel[actual_bullet] = (int) new Vector2D(BulletPoint[actual_bullet].getX(),BulletPoint[actual_bullet].getY()).getDistance(new Vector2D(arg0.getX(),arg0.getY()));
			StartPoint[actual_bullet] = IndianVector;
			shot[actual_bullet] = true;
			shotWinkel[actual_bullet] = winkel;

			if(actual_bullet==9)
			{
				actual_bullet = 0;
			}
			else
			{
				actual_bullet++; 
			}
		}
	}
	public void drawGame(Graphics2D g)
	{
		System.out.println("drawGame(Graphics2D g);");

		g.setColor(Color.green);
		for(int i = 0; i<bullets; i++)
		{	
			g.drawLine(BulletPoint[i].getX(),BulletPoint[i].getY(),BulletPoint[i].getX()+arrow_lenght,BulletPoint[i].getY());
		}
		indian.drawIndian(g, IndianVector);
	}
	public void math()
	{
		double x = (mouseX - IndianVector.getX()) / (double) width;
        double y = (mouseY - IndianVector.getY()) / (double) height;
        winkel = (Math.PI * ((y < 0)? 1 : 2) - Math.atan(x / y)); 
        
        indian.setBogenRot(winkel);
        
		for(int i = 0;i<bullets;i++)
		{
			if(shot[i])
			{
				if(radius[i]+bulletSpeed<=ziel[i])
				{
					radius[i]+=bulletSpeed;
				}
				else
				{
					radius[i] = 0;
					shotWinkel[i] = 0;
					shot[i] = false;
				}
			}
		}
	}
	public static void main(String[]args)
	{
		new Level_01();
	}
}

Ausgabe:
Java:
init();
drawGame(Graphics2D g);
Exception in thread "main" java.awt.IllegalComponentStateException: The frame is displayable.
	at java.awt.Frame.setUndecorated(Unknown Source)
	at levels.GameFrame.start(GameFrame.java:43)
	at levels.Level_01.<init>(Level_01.java:29)
	at levels.Level_01.main(Level_01.java:137)
drawGame(Graphics2D g);
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at levels.Level_01.drawGame(Level_01.java:106)
	at levels.GameFrame$1.paintComponent(GameFrame.java:55)
	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 javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Was mache ich denn so falsch?
 

Der Müde Joe

Top Contributor
>Was mache ich denn so falsch?

Neee...das wäre zu einfach...

Starte den Debugger und schau was null ist. Falls du Eclipse benutzt: Man kann auch Breakpoints auf Exception setzten
 

Developer_X

Top Contributor
Also, ich habs leider noch immer nicht hinbekommen, wisst ihr ich hab mir den Umstand mit GameFrame aus folgendem Grund gemacht:
Ich wollte einfach mal ein Schema machen, eine Art Basis, auf die ich aufbauen kann nach dem Moto 'einfach mal erben, den komplexen Teil macht mit die Klasse von der ich Erbe', all das ganze implementieren, und dei vielen Methoden sollten nicht mehr zu sehen sein. Einfach nur die wichtigsten Methoden überschreiben, und einfach nutzen. Doch irgendetwas mit der init Methode hat nicht geklappt. Ihr könnt euch noch an den X-Mas-Shooter erinnern?, nun ja, ich weiß, das war nicht fertig, aber das mit dem schießen, das was ich wirklich selbst programmiert habe wollte ich mitnehmen, genauso wie den Teil, bei dem ihr, das Forum, mit geholfen habt, der Teil mit der Rotation, doch ich habe leider immer noch Probleme diesen Fehler´zu finden, vielleicht ist das ein Problem, das entsteht wenn man erbt. Kann es sein? Die init Methode wird aufgerufen, ich habe System.out.prinln Methoden eingefügt, in die methode init und draw und in meiner Console erschien zuerst 'init()';.
Ich weiß nicht was ich machen soll, das mit dem Debuggen hab ich probiert, aber daraus werd ich um ehrlich zu sein auch nicht schlauer.

developer_X
 

Jango

Gesperrter Benutzer
Ich weiß nicht was ich machen soll, das mit dem Debuggen hab ich probiert, aber daraus werd ich um ehrlich zu sein auch nicht schlauer.

Warum wirst du daraus nicht schlau?
Liegt es daran, dass du die englischen Begriffe nicht verstehst, oder liegts daran, dass du von dem Code keine Ahnung hast? Das Zweite wäre ja Quatsch, wenn du den Code selbst geschrieben hast. Man schreibt ja nicht aufs Geradewohl irgend welchen Code...
Einzelschritte beim Debuggen sollten doch genug Aufschluss geben.
 

Developer_X

Top Contributor
ich habe es herausgefunden. Es ist kein Fehler von meinem Code, sondern ein Problem das beim erben entsteht.
In der Mutter klasse, wenn man da die Methode start() im Konstruktor aufgerufen hat, gabs kein Probelme, aber seit dem ich in der neuen Klassen , Level_01, die methode start aufrufe, klappt es.

Trotzdem danke euch allen.
Und um ehrlich zu sein, ich finde For Schleifen jetzt viel besser.
Java:
int i = 0;
while(i<20)
{
// ...
 i++;
}
Java:
for(int i = 0; i<20; i++)
{
//...
}

Man sieht deutlich:
While:3For
ist wie
6:3
oder
2:1
^^
Developer_X
 
S

Spacerat

Gast
Da sieht man's wieder... Du liest dich nicht ein bisschen in Java ein. Was ist denn genau der Fehler? Wer jetzt NPE sagt, wird standrechtlich erschossen (blos nicht wörtlich nehmen)... Mach dich mal darüber schlau, was in Konstruktoren passiert, wenn man den Aufruf des Standardkonstruktors per [c]super()[/c] weglässt und warum gerade bei dir deswegen diese [c]IllegalComponentStateException[/c] fliegt. Soviel zum Thema Fehler in deinem Code.
 

faetzminator

Gesperrter Benutzer
Ich bin gerade über den Thread geflogen und frage ich vor allem über [c]@SuppressWarnings("serial")[/c]. DevX, warum fügst du nicht einfach eine Nummer ein?
 
S

SlaterB

Gast
@SuppressWarnings("serial")
habe ich auch bei zig meiner Klassen stehen, wozu die Nummer einfügen?
statische Variablen haben alle ihren Sinn, da ist mir ausnahmsweise eine anders dargestellte und leicht zu überlesende Annotation vor der Klassendefinition lieber,
wenn man noch andere Annotations hat, dann ist die sogar platzsparend gegenüber der Konstante

@SuppressWarnings({"unqualified-field-access","serial","synthetic-access"})
 
S

Spacerat

Gast
Dann sollte man diese der Vollständigkeit halber aber auch posten. Da für dich aber das Thema ja damit durch ist, bleibt das wieder an anderen hängen...;) naja...
Ist im Prinzip ja auch recht einfach. Lässt man [c]super(iwp)[/c] weg, wird der Standardkonstruktor der Superklasse trotzdem ausgeführt. Dadurch wird [c]start()[/c], welche mit [c]setUndecorated(true)[/c] beginnt und [c]setVisible(true)[/c] endet, zwei mal aufgerufen, wobei der 2. Aufruf von [c]setUndecorated(true)[c] halt der Fatale ist. Aufgrund dieser Exception werden die Initialisierung der Kasse [c]Level_01[/c] abgerochen, [c]BulletPoint[/c] und Konsorten bleiben null und daraus folgt dann halt die NPE... Danke für Ihre Aufmerksamkeit und guten Rutsch ins neue Jahr.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
N Nullpointer exception Java Basics - Anfänger-Themen 4
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
R indexOf wirft NullPointer Exception Java Basics - Anfänger-Themen 2
H Nullpointer Exception Java Basics - Anfänger-Themen 8
P NullPointer Exception Java Basics - Anfänger-Themen 6
C Erste Schritte GUI - ActionListener - Exception Nullpointer Java Basics - Anfänger-Themen 5
C Java Nullpointer Exception in 2D-Spiel Snake Java Basics - Anfänger-Themen 8
N NullPointer Exception bei setSource (Audioplayer mit JMF) Java Basics - Anfänger-Themen 6
J Methoden in externer Klasse -> Nullpointer Exception Java Basics - Anfänger-Themen 9
J Nullpointer Exception - Warum? Java Basics - Anfänger-Themen 9
K zufallszahlen in Array Speichern = Nullpointer exception Java Basics - Anfänger-Themen 24
D Nullpointer Exception Java Basics - Anfänger-Themen 2
MEETyA NullPointer Exception - Sudoku Java Basics - Anfänger-Themen 2
D Nullpointer exception bei: if( (rc.getTower != null) ) {..} Java Basics - Anfänger-Themen 2
G Problem mit Nullpointer Exception Java Basics - Anfänger-Themen 2
K Nullpointer Exception? Was tun? Java Basics - Anfänger-Themen 7
R Wieder mal ne NullPointer Exception. Java Basics - Anfänger-Themen 8
D nullpointer exception Java Basics - Anfänger-Themen 12
D Problem mit Vector / Nullpointer Exception Java Basics - Anfänger-Themen 3
S Nullpointer Exception bei Point2D Java Basics - Anfänger-Themen 2
8 JLayer Nullpointer Exception Java Basics - Anfänger-Themen 6
megachucky kleines problem mit einer nullpointer exception Java Basics - Anfänger-Themen 2
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
Dimax BufferedReader.readLine().length() wirft NullPointer Java Basics - Anfänger-Themen 6
AlexG. Nullpointer Exeption Java Basics - Anfänger-Themen 46
AlexG. Nullpointer exeption Fehler Java Basics - Anfänger-Themen 0
J Nullpointer aber wo? Java Basics - Anfänger-Themen 12
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
K Nullpointer beim Erstellen eines Imageicons Java Basics - Anfänger-Themen 2
O Perfomance: Arraylist absichtlich zum Nullpointer schicken... Java Basics - Anfänger-Themen 16
S Iterator next() Nullpointer Java Basics - Anfänger-Themen 2
W Nullpointer bei Objekt Serialisierung mit ArrayList<byte[]> etc. Java Basics - Anfänger-Themen 2
Q CardLayout und NullPointer Java Basics - Anfänger-Themen 3
R NullPointer Exceptions Java Basics - Anfänger-Themen 3
P ArrayList Nullpointer? Java Basics - Anfänger-Themen 4
M TextField Nullpointer Exc Java Basics - Anfänger-Themen 8
I Array - Nullpointer Ausnahme Java Basics - Anfänger-Themen 2
J NullPointer bei ArrayList.add Java Basics - Anfänger-Themen 6
C NullPointer Java Basics - Anfänger-Themen 3
D NullPointer bei ActionCommand in Array Java Basics - Anfänger-Themen 2
D Dubioser Nullpointer Java Basics - Anfänger-Themen 5
M Java3D TransformChanged nullpointer ??? Java Basics - Anfänger-Themen 2
X Nullpointer Fehler Java Basics - Anfänger-Themen 3
R Probleme mit NullPointer beim Mp3 abspielen (JMF) Java Basics - Anfänger-Themen 21
Antoras Nullpointer bei Wertübergabe Java Basics - Anfänger-Themen 10
Antoras Swing repaint und Nullpointer Java Basics - Anfänger-Themen 6
G NullPointer bei if anweisung Java Basics - Anfänger-Themen 14
Antoras NullPointer und Swing-Problem Java Basics - Anfänger-Themen 2
G (csv)Datei lesen FindBug findet mgl. NullPointer - wie lösen Java Basics - Anfänger-Themen 3
A g=panel.getGraphics() im Thread => Nullpointer Java Basics - Anfänger-Themen 9
T KeyListener, Nullpointer und eine unbekannte Variable Java Basics - Anfänger-Themen 6
E Fehler NullPointer beim Ausführen Java Basics - Anfänger-Themen 4
E nullpointer bei BufferedImage Java Basics - Anfänger-Themen 2
S Arrays und Nullpointer Java Basics - Anfänger-Themen 6
B NullPointer... Java Basics - Anfänger-Themen 6
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
1 Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben