# Ping Pong Spiel Fehlermeldung



## raven (17. Nov 2004)

Ich habe in das Spiel ein VotilaImage eingebaut mit es flüssiger läuft und nicht so lange arbeitet. Unf geanu
das Votla Image hat jetzt eine Magge in Zeile 120 hier untem im Quellcode ist der Fehler laut Fehlermeldung.


Ich bekomme bai dem Spiel immer eine NullPointerException und
Das ist meine Fehlermeldung:

java.lang.NullPointerException
        at PingPong2.paint(PingPong2.java:130)
        at java.awt.Container.update(Unknown Source)
        at sun.awt.RepaintArea.paint(Unknown Source)
        at sun.awt.motif.MComponentPeer.handleEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(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)


So ich gebe auch gleich mal den ganzen Code.


```
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Arc2D;
import java.awt.geom.AffineTransform;
import javax.swing.*;
import java.awt.image.VolatileImage;
import java.net.URL;

public class PingPong2 extends Frame implements Runnable, MouseMotionListener
{
	Thread t;
	boolean bWeiter=true;

	private Image dbImage;
 	private Graphics dbg;
	Image img;

	Label Lstunden;
	Label Lminuten;
	Label Lsekunden;
	Label Doppelpunkt;

	Image Hintergrund;
	Image Ball;

	int Ballx=450;
	int Bally=265;
	int p=10;
	int px=p;
	int py=p;
	int ypl=200;
	int Cypl=200;
	int w=970;
	int h=580;

	VolatileImage vImg = createVolatileImage(w, h);

	public PingPong2()
	{
		addWindowListener(new WindowAdapter()
		{public void windowClosing (WindowEvent evt) {System.exit(0);}});
		setSize(970,580);
		setBackground(Color.black);
		setTitle("Ping Pong 2");
		setVisible(true);
		setLayout(null);
		addMouseMotionListener(this);

		URL url = null;
		url = this.getClass().getResource("weltraum.jpg");
		Hintergrund = getToolkit().getImage(url);

		url = this.getClass().getResource("ball.gif");
		Ball = getToolkit().getImage(url);

		start();
	}
	public static void main (String[] args)
	{
		new PingPong2();
	}
	public void start()
	{
		t = new Thread(this);
		t.start();
	}
	public void stopp()
	{
		bWeiter=false;
	}
	public void run()
	{
		while (bWeiter)
		{
			try
			{
				t.sleep(0);
			}
			catch (Exception e) { }

			if((Ballx+10)>=970)															// Ballrichtun rechts
			{
				px=-p;
			}
			if(Ballx<=0)
			{
				px=+p;
			}
			if((Bally+10)>=580)															// Ballrichtun rechts
			{
				py=-p;
			}
			if(Bally<=25)
			{
				py=+p;
			}
			if((Ballx<80) && Bally>(ypl-50) && Bally<(ypl+50)) // ist am Schlaeger
			{
				px=+p;

			}
			if((Ballx>890) && Bally<(Cypl+50) && Bally>(Cypl-50)) // Computer schl?ger
			{
				px=-p;

			}
			Bally=Bally+py;
			Ballx=Ballx+px;
			Cypl=Bally;
			repaint();
		}
	}
	public void renderOffscreen() {
		do {
			if (vImg.validate(getGraphicsConfiguration()) ==
			VolatileImage.IMAGE_INCOMPATIBLE)
			{
				// old vImg doesn't work with new GraphicsConfig; re-create it
				vImg = createVolatileImage(w, h);
			}
			Graphics2D g = vImg.createGraphics();
			g.dispose();
		} while (vImg.contentsLost());
 	}
	public void paint (Graphics g)
	{

		do {
			int returnCode = vImg.validate(getGraphicsConfiguration());    				// Laut Fehlermeldung müsste der Code hier sein.
			if (returnCode == VolatileImage.IMAGE_RESTORED) {
				// Contents need to be restored
				renderOffscreen();      // restore contents
			} else if (returnCode == VolatileImage.IMAGE_INCOMPATIBLE) {
				// old vImg doesn't work with new GraphicsConfig; re-create it
				vImg = createVolatileImage(w, h);
				renderOffscreen();
			}
			g.drawImage(vImg, 0, 0, this);
 		} while (vImg.contentsLost());

		g.drawImage(Ball,400,400,this);

		g.setColor(Color.red);
		g.fillOval(Ballx,Bally,10,10);

		g.setColor(Color.gray);
		g.fillRect(50,ypl-30,10,100);
		g.fillRect(910,Cypl-30,10,100);
		System.out.println("Paint aufgerufen");
	}
	public void keyTyped(KeyEvent e)				// Tastendefinition
	{

	}
	public void mouseDragged(MouseEvent me)
	{

	}
	public void mouseMoved(MouseEvent me)
	{
		ypl=me.getY();
	}
}
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Arc2D;
import java.awt.geom.AffineTransform;
import javax.swing.*;
import java.awt.image.VolatileImage;
import java.net.URL;

public class PingPong2 extends Frame implements Runnable, MouseMotionListener
{
	Thread t;
	boolean bWeiter=true;

	private Image dbImage;
 	private Graphics dbg;
	Image img;

	Label Lstunden;
	Label Lminuten;
	Label Lsekunden;
	Label Doppelpunkt;

	Image Hintergrund;
	Image Ball;

	int Ballx=450;
	int Bally=265;
	int p=10;
	int px=p;
	int py=p;
	int ypl=200;
	int Cypl=200;
	int w=970;
	int h=580;

	VolatileImage vImg = createVolatileImage(w, h);

	public PingPong2()
	{
		addWindowListener(new WindowAdapter()
		{public void windowClosing (WindowEvent evt) {System.exit(0);}});
		setSize(970,580);
		setBackground(Color.black);
		setTitle("Ping Pong 2");
		setVisible(true);
		setLayout(null);
		addMouseMotionListener(this);

		URL url = null;
		url = this.getClass().getResource("weltraum.jpg");
		Hintergrund = getToolkit().getImage(url);

		url = this.getClass().getResource("ball.gif");
		Ball = getToolkit().getImage(url);

		start();
	}
	public static void main (String[] args)
	{
		new PingPong2();
	}
	public void start()
	{
		t = new Thread(this);
		t.start();
	}
	public void stopp()
	{
		bWeiter=false;
	}
	public void run()
	{
		while (bWeiter)
		{
			try
			{
				t.sleep(0);
			}
			catch (Exception e) { }

			if((Ballx+10)>=970)															// Ballrichtun rechts
			{
				px=-p;
			}
			if(Ballx<=0)
			{
				px=+p;
			}
			if((Bally+10)>=580)															// Ballrichtun rechts
			{
				py=-p;
			}
			if(Bally<=25)
			{
				py=+p;
			}
			if((Ballx<80) && Bally>(ypl-50) && Bally<(ypl+50)) // ist am Schlaeger
			{
				px=+p;

			}
			if((Ballx>890) && Bally<(Cypl+50) && Bally>(Cypl-50)) // Computer schl?ger
			{
				px=-p;

			}
			Bally=Bally+py;
			Ballx=Ballx+px;
			Cypl=Bally;
			repaint();
		}
	}
	public void renderOffscreen() {
		do {
			if (vImg.validate(getGraphicsConfiguration()) ==
			VolatileImage.IMAGE_INCOMPATIBLE)
			{
				// old vImg doesn't work with new GraphicsConfig; re-create it
				vImg = createVolatileImage(w, h);
			}
			Graphics2D g = vImg.createGraphics();
			g.dispose();
		} while (vImg.contentsLost());
 	}
	public void paint (Graphics g)
	{

		do {
			int returnCode = vImg.validate(getGraphicsConfiguration());
			if (returnCode == VolatileImage.IMAGE_RESTORED) {
				// Contents need to be restored
				renderOffscreen();      // restore contents
			} else if (returnCode == VolatileImage.IMAGE_INCOMPATIBLE) {
				// old vImg doesn't work with new GraphicsConfig; re-create it
				vImg = createVolatileImage(w, h);
				renderOffscreen();
			}
			g.drawImage(vImg, 0, 0, this);
 		} while (vImg.contentsLost());

		g.drawImage(Ball,400,400,this);

		g.setColor(Color.red);
		g.fillOval(Ballx,Bally,10,10);

		g.setColor(Color.gray);
		g.fillRect(50,ypl-30,10,100);
		g.fillRect(910,Cypl-30,10,100);
		System.out.println("Paint aufgerufen");
	}
	public void keyTyped(KeyEvent e)				// Tastendefinition
	{

	}
	public void mouseDragged(MouseEvent me)
	{

	}
	public void mouseMoved(MouseEvent me)
	{
		ypl=me.getY();
	}
}
```


----------



## dotlens (17. Nov 2004)

also 1. variablen schreibt man klein. sonst kommt kein schwein draus 

2. überprüf ob die nullpointer exception wirklich von dem VotilaImage kommt


```
if(VotilaImage  == null)
     System.out.println("wirklich");
```


----------



## raven (17. Nov 2004)

Die Fehlermeldung kommt nicht vom VotilaImage.

Steht kein "wirklich" unten unten Konsole


Aber die Fehlermeldung sagt doch der Fehler kommt aus der Zeile 130
					|
					|
				       \ /	
at PingPong2.paint(PingPong2.java:130) 

Und das ist bei mir im Code die Zeile:

int returnCode = vImg.validate(getGraphicsConfiguration());


----------



## SebiB90 (17. Nov 2004)

getGraphicsConfiguration() <--- zu welchem object gehört das das fehlt da glaub ich


----------



## raven (17. Nov 2004)

Und was muss ich da für ein Objekt hinmachen?

Den Code habe ich von hier:

http://www.dpunkt.de/java/Referenz/Das_Paket_java.awt.image/51.html

den musste ich nur noch ein bisschen abändern, weil es jede menge Fehler gab.


----------



## Roar (17. Nov 2004)

SebiB90 hat gesagt.:
			
		

> getGraphicsConfiguration() <--- zu welchem object gehört das das fehlt da glaub ich



zu this (er leitet von Frame ab)


----------



## dotlens (18. Nov 2004)

gehts jetzt? 
ist getGraphicsConfiguration() == null?


----------



## thE_29 (18. Nov 2004)

[offtopic]@X-Master: deine sig hat da was 
Besucht mal mein*e* Programmier Board !!! [/offtopic]


----------



## raven (18. Nov 2004)

dotlens hat gesagt.:
			
		

> ist getGraphicsConfiguration() == null?



Hier sollte es doch hin oder?

if (vImg.validate(getGraphicsConfiguration()) == ......................

Wenn ja dann kommt ein Fehler.


----------



## dotlens (18. Nov 2004)

nein nur das:

```
if(getGraphicsConfiguration()) == null)
     System.out.println("hier ist der übeltäter");
```


----------



## raven (18. Nov 2004)

Und wo soll das und durch was soll es ersetzt werden?


----------



## dotlens (22. Nov 2004)

nö du sollst nicht ersetzen. 
das ist nur eine ausgabe um den Fehler zu finden, die du zusätzlich einbaust.(Direkt unter dem if (vImg.validate(getGraphicsConfiguration()) == ....)

Grundsätzlich kann ich dir nur raten, wenn du Fehler suchst, lass dir alles ausgeben um zu erfahren wo der Fehler liegt.


----------



## raven (22. Nov 2004)

Achso Danke nochmal


----------

