getGraphics()抛空指针异常
Image tempBufferedImage = this.createImage(this.getWidth(), this.getWidth());Graphics2D g2d=null;
try {
g2d = (Graphics2D) tempBufferedImage.getGraphics(); //①
//g2d = (Graphics2D)getGraphics();
} catch (NullPointerException e) {
System.out.println("116");
}
①处总是抛出空指针异常,也就是总是走catch,怎么能解决这个问题。
createImage getGraphics Graphics2D --------------------编程问答-------------------- 此类继承JPanel --------------------编程问答-------------------- 你检查一下看看tempBufferedImage这个引用是不是空的 --------------------编程问答-------------------- 这个getGraphics方法返回的是个空值。jdk提供的方法,但是。。。 --------------------编程问答-------------------- g2d = tempBufferedImage.createGraphics();
改成这样试试 --------------------编程问答-------------------- 由于没有完整的代码,自己补充了部分代码。
运行后,并没有抛出异常,请楼主给出完整代码。
我的代码如下:
import java.awt.Graphics2D;--------------------编程问答-------------------- sorry,搞错了。另外,
import java.awt.Image;
import javax.swing.JPanel;
public class ImageDemo1 extends JPanel
{
public void createImg()
{
Image tempBufferedImage = this.createImage(this.getWidth(),
this.getWidth());
Graphics2D g2d = null;
try
{
g2d = (Graphics2D) tempBufferedImage.getGraphics(); // ①
// g2d = (Graphics2D)getGraphics();
} catch (NullPointerException e)
{
System.out.println("116");
}
}
/**
* @param args
*/
public static void main(String[] args)
{
ImageDemo1 id1 = new ImageDemo1();
id1.createImg();
}
}
在eclipse中运行时,会出现null并不奇怪。
(1)参考JPanel中的createImage()方法的说明:如果组件不可显示,则该方法返回null
(2)在楼主的代码中,自定义JPanel类并不能单独显示,因为JPanel只是一个容器组件,而Java的组件显示是要在窗体中才能显示,必须把JPpanel加入到窗体中去后,调用窗体的setVisible(true)才能显示。
根据以上两点,可有结论:
因为自定义的JPanel类并不在任一个窗体中,如JFrame,所以它并不能显示出来。
导致的结果是:
通过自定义的JPanel类组件调用createImage()方法,得到的只是null
以下是在自定义的JFrame中使用createImage()方法,并没有出现异常。因为JFame可以独立显示出来。
代码:
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.JFrame;
public class ImageDemo1 extends JFrame
{
private int width = 200;
private int height = 200;
public ImageDemo1()
{
setTitle("ImageDemo1");
setSize(300, 300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public Image createImg()
{
Image tempBufferedImage = this.createImage(this.width,
this.height);
Graphics2D g2d = null;
try
{
g2d = (Graphics2D) tempBufferedImage.getGraphics(); // ①
// g2d = (Graphics2D)getGraphics();
} catch (NullPointerException e)
{
System.out.println("116");
}
return tempBufferedImage;
}
/**
* @param args
*/
public static void main(String[] args)
{
ImageDemo1 id1 = new ImageDemo1();
id1.createImg();
}
}
--------------------编程问答-------------------- 补充:
(1)JPanel通过继承Component类,从而拥有createImage()方法
(2)添加的代码并不影响楼主的意图
createImage()方法中的参数并没有使用getWidth()方法,而是直接使用自定义的属性width和height,也可以在其中增加方法getWidth()和getHeight(),来获取width和height属性
--------------------编程问答-------------------- getGraphics
public abstract Graphics getGraphics()创建供绘制闭屏图像(off-screen image)使用的图形上下文。此方法仅供闭屏图像调用。
返回:
绘制闭屏图像的图形上下文。
你那个Image对象是闭屏图像吗?
--------------------编程问答--------------------
Image对象貌似不能用createGraphics();方法 我查了API文档 --------------------编程问答--------------------
被变量名迷惑了,以为是个BufferedImage。
补充:Java , Java SE