# NullpointerException , aber warum?



## Miklo (29. Sep 2007)

Hallo,
ich wollte heute mein kleines Applet erweitern und korrigieren. Nun steh ich aber schon eine ganze weile vor dem Problem, dass es eine NullpointerException wirft, wenn ich folgendes Codefragment ausführe, welches einen DoubleBuffer realisieren sollte, welcher genutzt wird , um ein zusätzliches canvas( auf neuem panel )zu zeichnen.
Könnte mir vielleicht ein anstoss geben...

MfG Miklo

private class Display extends Canvas{

```
.
                .
		.
                .
		
		/**
		 * Ausgabe
		 */
		private static final long serialVersionUID = 1L;
		private Graphics offgc;
    	private Image offscreen;;
		
		protected HiscoreDisplay(){
			this.setSize(400, 400);
			offscreen=this.createImage(400,400);
			offgc=offscreen.getGraphics();
			malen();
		}
		
		public void malen(){
			einlesen();
			for(int x=0;x<400;x=x+2){
				offgc.drawImage(vorhang, 0, 0, this);
				int y=100;
				for(int i=0;i<10;i++){
					offgc.setFont(new Font("Arial",Font.BOLD,18));
					offgc.setColor(Color.yellow);
					System.out.println(""+name[2]);
					offgc.drawString(name[i],140,y);
					offgc.drawString(""+punkte[i],230,y);
					y+=30;
				}
			}
			repaint();
		}
		public void update(Graphics g){
			paint(g);
		}

		public void paint(Graphics g){
			g.drawImage(offscreen,0,0,this);
		}
	}
}
```


----------



## Miklo (29. Sep 2007)

Hallo,

hab nun noch einige änderungen vorgenommen. Hab es mal mit der klasse bufferedimage probiert. immer noch ohne erfolg. Weiss wiklich niemand, was hier falsch geht?
Das Bild erscheint zwar nun, es flackert jedoch immer noch immens.
MfG
Miklo
Hier mal der geänderte Code:


```
private class Display extends Canvas{
		
		
		/**
		 * Canvas
		 */
		private static final long serialVersionUID = 1L;
		private Graphics offgc,g;
    	private BufferedImage offscreen=new BufferedImage(400,400,BufferedImage.TYPE_INT_ARGB);
		
		protected HiscoreDisplay(){
			this.setSize(400, 400);
			einlesen();
			checkHiscore();
			//DoubleBuffer
			offgc=offscreen.getGraphics();
			g= getGraphics ( );
		}
		
		public void malen(){
			offgc.drawImage(vorhang, 0, 0, this);
				int y=100;
				for(int i=0;i<10;i++){
					offgc.setFont(new Font("Arial",Font.BOLD,18));
					offgc.setColor(Color.yellow);
					offgc.drawString(name[i],140,y);
					offgc.drawString(""+punkte[i],230,y);
					y+=30;
				}
			
			repaint();
		}
		
		public void update(Graphics g){
			paint(g);
		}

		public void paint(Graphics g){
			
			  if (offscreen != null) {
				    g.drawImage(offscreen,0,0,this);
				  }
			  malen();
		}
	}
```

Hab echt irgendwie keine Ahnung mehr...


----------



## Marco13 (30. Sep 2007)

Habs nicht getestet, aber: paint ruft 'malen' auf, und 'malen' triggert ein "repaint" -> Das gibt eine Art "Endlosschleife"... Mach das mal raus. Wenns nicht hilft, sag bescheid.


----------

