# Image.getGraphics() in einem Frame



## Dr. Morv (16. Okt 2004)

Hi, 
ich habe im Applet für Double Buffering immer ein Image erstellt, und in dieses Image mit 
g=getGraphics(); g.draw...(); gemalt. Als ich das für ein Spiel in einen Frame nutzen wollte, ging das plötzlich nciht mehr. Es gibt dabei immer einen PointerOutOfBounds-Laufzeitfehler.  Muss man in einem Frame eine Andere Methode benutzen? Das Image habe ich natürlich mit buffer = createImage(300, 300); initialisiert.


----------



## Beni (16. Okt 2004)

Überschreib die Methode "paint( Graphics g )" des Applets, und zeichne dortdrin. Die Methode wird immer aufgerufen, wenn du "repaint" aufrufst, oder wenn der Browser das Bild neu haben möchte.


----------



## Dr. Morv (17. Okt 2004)

Nein, ich habe paint() ja schon überschrieben. Trotzdem ruckelt die Grafik immer noch stark, besonders, weil ich erst den Hintergrund und dann die Figuren zeichne. Deswegen hätte ich ja gerne ein Image, in das ich erst zeichne. Dann muss ich nur noch 
	
	
	
	





```
public void paint(Graphics g){
g.drawImage(buffer, 0, 0, this);
}
```
einfügen. Aber das geht nicht, wenn ich nicht in das Image zeichnen kann, und das geht meines spärlichen Wissens nach nicht ohne Graphics-Objekt. Ausserdem zeigt mir der Appletviewer oder ein anderes Java-Programm Frames.


----------



## Beni (17. Okt 2004)

Ach so (ich müsste mal genauer lesen :roll

Du brauchst das Graphics-Objekt des hergestellten Bildes, also: Graphics g = image.getGraphics();

P.S. versuch auch mal "createVolatileImage" anstelle von "createImage", ein VolatileImage ist schneller als ein normales Bild.

P.P.S. Ich weiss nicht wie dein Progi genau aussieht, aber jedes "createImage" braucht auch ein Zeitchen, also versuch immer wieder dasselbe Image zu brauchen.


----------



## Dr. Morv (19. Okt 2004)

Danke, für den Tipp. Ich habe jetzt geschrieben:

```
Image buffer = createImage(300, 300);
while(buffer==null){
buffer = createImage(300, 300); }
Graphics buffergr = buffer.getGraphics();
```
Das hat dann auch funktioniert. Scheint so, als liefe createImage() nebenläufig ab. Das ist aber wirklich seltsam, den funktional müsste es doch eigentlcih dasselbe sein. Komisch, eine Programmiersprache, die so kontextabhängig ist.  Könnt den Eintrag jetzt löschen.


----------

