Oberfläche mit Graphics zeichnen

Status
Nicht offen für weitere Antworten.

eQui

Mitglied
Hallo,
Ich bin dabei ein einfaches Spiel zu basteln.
Erst einmal möchte ich einen Ball zeichnen, dessen Werte (position, radius) von der Steuerungs-Klasse an die Methode zeichneSpielfeld(int,int,int) der Klasse Oberflaeche übergeben wird.

Hab soweit alles in eclipse geschrieben, keine Fehler werden angezeigt. beim ausführen als Applet bekomm ich aber folgendes:

Exception in thread "Thread-3" java.lang.NullPointerException
at code.Oberflaeche.zeichneSpielfeld(Oberflaeche.java:28)
at code.Steuerung.run(Steuerung.java:22)
at java.lang.Thread.run(Unknown Source)


Das wäre die Zeile g.fillOval(x,y,2*r,2*r); in der Klasse Oberflaeche
und die Zeile lnkOberflaeche.zeichneSpielfeld(10, 10, 10); in der Klasse Steuerung.

Hab keine Idee mehr, wie ich das sonst realisieren könnte. Es soll nämlich eine separate Klasse Oberflaeche geben und in sämtlichen Erklärungen zum Thema Graphics finde ich alles nur in einer Klasse geschrieben.

Liebe Grüße
 
Hallo,
kann ich irgendwie die Werte des Balls von der Steuerung an die Methode paint() übergeben?
 
vielleicht ne dumme frage, was sind member? könnte mir vorstellen, dass google bei dem begriff viel anderes zeug liefert, darum frag ich gleich hier.
 
eQui hat gesagt.:
vielleicht ne dumme frage, was sind member? könnte mir vorstellen, dass google bei dem begriff viel anderes zeug liefert, darum frag ich gleich hier.

"Was sind Member?" LOL
Gib es zu, du bist blos zu faul, bei google zu suchen, denn:

Erster google-Treffer bei dem Suchbegriff "java member" war erfolgreich! Nun bist du gefragt. :roll:
 
Code:
class Blubb {
   private Point aMember;

   void aMethod(){
         Point notAMember;
   }
}
 
Vielleicht bin ich da jetzt ja zu stark vorgeprägt, aber ... weil es immer wieder gemacht wird, und eben in einem anderen Thread auch mal wieder auftauchte, und weil der beschriebene Fehler eines der vielen, vielen, vielen möglchen Symptome ist: Rufst du zufällig irgendwo die Methode "getGraphics" auf?

Ansonsten poste mal ein bißchen mehr code. Zumindest die relevanten Teile.
 
hallo,
ich hab das jetzt so "gelöst", dass ich eine weitere methode "uebergebe()" eingebaut hab.
bevor das applet jetzt neu gezeichnet werden soll, werden erst die neuen koordinaten durchgegeben. getGraphics() hab ich nicht merh drin, hatte ich davor jedoch aus verzweiflung auch ausprobiert.

funktioniert aber trotzdem noch nicht:

Oberflaeche:

Code:
package code;

import java.applet.*;
import java.awt.Graphics;

public class Oberflaeche extends Applet{
	
	private Steuerung lnkSteuerung;
	private int ball_X;
	private int ball_Y;
	private int radius;
	
	
	public void init(){
		lnkSteuerung=new Steuerung();	
	}
	
	public void start(){
		lnkSteuerung.start();
	}
	
	public void uebergebe(int x, int y, int r){
		ball_X=x;
		ball_Y=y;
		radius=r;
				
	}

	public void paint(Graphics g){
		g.fillOval(ball_X,ball_Y,2*radius,2*radius);
	}
}

Steuerung:

Code:
package code;

public class Steuerung implements Runnable{
	
	private Oberflaeche lnkOberflaeche;
	private Ball lnkBall;
	 
	public Steuerung(){
		lnkBall=new Ball(10,10,30,1);
		lnkOberflaeche=new Oberflaeche();
	}
		
	public void start(){
		Thread th=new Thread(this);
		th.start();
	}
	
	public void run(){
		System.out.println("hallo");	
		
		while (true){
			lnkBall.bewege();
			lnkOberflaeche.uebergebe(lnkBall.getX(),lnkBall.getY(),lnkBall.getRadius());
			lnkOberflaeche.repaint();
			try{
				Thread.sleep(20);
			}
			catch (InterruptedException e){
				//nichts tun				
			}
		}	
	}
}

das sieht jetzt so aus, dass das ganze bei "System.out.println("hallo");" ankommt, dieses in die konsole schreibt aber sonst nichts weiter passiert. also ich find, das sollte funktioneren :?

danke für eure hilfe, seid nich zuuuu genervt wenn ich nichts versteh'

liebe grüße
 
hat keiner ne idee? ich hab in die while-schleife jetzt nochmal n system.out.print welches die Y-Koors. ausgibt. werden tadellos hochgezählt und auch das mit dem Thread.sleep() funktioniert. nur das gezeichne klappt nicht! aber keinerlei fehlermeldungen!?

wäre nett, danke
 
Deine "Oberfläche" baut sich eine "Steuerung", eine "Steuerung" baut sich eine "Oberfläche", ... du siehst die Endlosrekursion?

Übergib der Steuerung doch die Oberfläche:
Code:
 public Steuerung( Oberflaeche oberflaeche ){
      lnkBall=new Ball(10,10,30,1);
      lnkOberflaeche=oberflaeche;
   }
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben