Graphics2D对象总是给出NullPointerException

时间:2011-10-13 19:52:02

标签: java graphics

我想创建简单的绘图程序;

这是我的程序的mousePressed和mouseDragged事件:

private void mousePressed(java.awt.event.MouseEvent evt) {
    touch = evt.getPoint();
    pressed = true;
}


private void mouseDragged(java.awt.event.MouseEvent evt) {
    Point p = evt.getPoint();
    if(pressed){
        graphics2D.drawLine(touch.x, touch.y, p.x, p.y);
    }
    repaint();
}

但是当我尝试绘制某些内容时,它总是在"Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException"

中提供graphics2D.drawLine(touch.x, touch.y, p.x, p.y);

我还覆盖了paintComponent方法

public void paintComponent(Graphics g){
    if(image == null){
        image = createImage(getSize().width, getSize().height);
        graphics2D = (Graphics2D)image.getGraphics();
        graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        clear();
    }
    g.drawImage(image, 0, 0, null);
}

我明确的方法是:

public void clear(){
    graphics2D.setPaint(Color.white);
    graphics2D.fillRect(0, 0, getSize().width, getSize().height);
    graphics2D.setPaint(Color.black);
    repaint();
}

我该怎么办?

由于

3 个答案:

答案 0 :(得分:2)

您需要了解如何使用Java绘制内容: Painting in AWT and Swing

如果您使用Swing进行自定义绘制,则应覆盖要为其自定义绘制的组件上的方法paintComponent(Graphics g),并在该覆盖方法中进行绘制。您将始终在该方法中获得初始化的Graphics对象。

答案 1 :(得分:1)

您尚未指定graphics2D的任何内容。我的猜测是,这是一个你永远不会初始化的字段,所以它总是有一个空值。

您可能实际上应该在某些“要绘制的线”列表中添加一行,然后在绘图处理程序中实际执行绘图部分。当你想做任何绘画时,这就是要处理的事件。

答案 2 :(得分:0)

您发布的代码看起来很合理。您在创建图像时初始化graphics2D变量。

Custom Painting Approaches显示了两种方法。其中一种方法是绘制到BufferedImage,这类似于你要做的事情。比较代码,看看有什么不同。