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,怎么能解决这个问题。
createImagegetGraphicsGraphics2D

解决方案 »

  1.   

    你检查一下看看tempBufferedImage这个引用是不是空的
      

  2.   

    这个getGraphics方法返回的是个空值。jdk提供的方法,但是
      

  3.   

     g2d = tempBufferedImage.createGraphics();   改成这样试试
      

  4.   

    由于没有完整的代码,自己补充了部分代码。运行后,并没有抛出异常,请楼主给出完整代码。我的代码如下:
    import java.awt.Graphics2D;
    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();
    }}
      

  5.   

    sorry,搞错了。另外,
    在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();
    }}
      

  6.   

    补充:(1)JPanel通过继承Component类,从而拥有createImage()方法(2)添加的代码并不影响楼主的意图
        createImage()方法中的参数并没有使用getWidth()方法,而是直接使用自定义的属性width和height,也可以在其中增加方法getWidth()和getHeight(),来获取width和height属性
        
      

  7.   

    getGraphics
    public abstract Graphics getGraphics()创建供绘制闭屏图像(off-screen image)使用的图形上下文。此方法仅供闭屏图像调用。 返回:
    绘制闭屏图像的图形上下文。   你那个Image对象是闭屏图像吗?
      

  8.   


    Image对象貌似不能用createGraphics();方法 我查了API文档
      

  9.   


    Image对象貌似不能用createGraphics();方法 我查了API文档
    被变量名迷惑了,以为是个BufferedImage。