Oddly though, I have been receiving a NullPointerException in my double-buffering approach. According to my stack trace, the problem lies in the [font=courier new,courier,monospace]Graphics.drawImage()[/font] method, but as you can see my code should be preventing my BufferedImage from being null.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.image.BufferedImage;
/**
* Class used to hold room design in progress
* Uses Runnable to keep updated
*
* @author Ian_Donovan
* @date
*/
public class RoomPanel extends Panel implements Runnable{
private static final long serialVersionUID = 1L;
private int w=1,h=1;
private Grid grid = new Grid(800,640,32,32);
public RoomPanel(int w, int h){
super();
this.w=w;
this.h=h;
this.setSize(w,h);
start();
}
//runnable stuff below
public void update(){
BufferedImage bfi = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
Graphics bfg;
boolean buffered = true;
bfg = bfi.getGraphics();
if (bfg==null || bfi == null){
buffered = false;
bfg=this.getGraphics();
}
bfg.setColor(Color.BLACK);
bfg.fillRect(0, 0, w, h);
grid.draw(bfg);
if (buffered){
Graphics finalGraphics = this.getGraphics();
finalGraphics.drawImage(bfi,0,0,null);
finalGraphics.dispose();
}
bfg.dispose();
}
//RUNNABLE THREADING WORKS FINE (Coppied from working code of other projects)
}
For those looking to test it, [font=courier new,courier,monospace]Grid.draw()[/font] only draws a small rectangle for now, so I felt as if it was unnecessary to include.
If someone could explain this error, I would be very grateful
Thank you so much in advance.