JAVA中JPanel图片缓存成BufferedImage,稍候将其画出,但画出为空白

如何将JPanel画出的图像,保存在缓存区(Bufferedimage),再通过drawImage()画出来
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (bufferedImage == null)
{
g.setColor(Color.red);
for (int i = 0; i < numCities; i++) {
g.fillOval(city[i].getX(), city[i].getY(), 10, 10);
g.drawString(city[i].getCityName(), city[i].getX() + 10,
city[i].getY() + 10);
}
g.setColor(Color.cyan);
for (int i = 0; i < numFlights; i++) {
g.drawLine(flights[i].from.getX(), flights[i].from.getY(),
flights[i].to.getX(), flights[i].to.getY());
}
}else{
g.drawImage(bufferedImage, 0, 0, null);
System.out.println("repaint");
}
}
p是JPanel对象。
BufferedImage bi = (new BufferedImage(p.getWidth(),p.getHeight(),BufferedImage.TYPE_INT_RGB)) ;
这样得到的 BufferedImage画出的没有图像。

百度一下 Java 双缓冲