Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Graphics2D对象始终提供NullPointerException_Java_Graphics - Fatal编程技术网

Java Graphics2D对象始终提供NullPointerException

Java Graphics2D对象始终提供NullPointerException,java,graphics,Java,Graphics,我想创建简单的绘图程序 我在这里看到了我的程序的鼠标按下和鼠标标记事件: 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(presse

我想创建简单的绘图程序

我在这里看到了我的程序的鼠标按下和鼠标标记事件:

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();
}
但是当我尝试绘制一些东西时,它总是在这行
图形2d.drawLine(touch.x,touch.y,p.x,p.y)中给出
“线程中的异常”AWT-EventQueue-0“java.lang.NullPointerException”

我还重写了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();
}
我该怎么办


谢谢

您还没有指定有关
图形2d
的任何内容。我猜这是一个永远不会初始化的字段,所以它总是有一个空值


您可能实际上应该在“要绘制的线”列表中添加一条线,然后在绘制处理程序中实际绘制部分。这是您要进行任何绘制时要处理的事件。

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


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

你需要阅读如何用Java绘制东西:


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

您需要阅读如何用Java绘制东西:


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

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


显示了两种方法。其中一种方法是对BuffereImage进行绘制,这与您要执行的操作类似。比较代码,看看有什么不同。

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


显示了两种方法。其中一种方法是对BuffereImage进行绘制,这与您要执行的操作类似。比较代码,看看有什么不同。

我应该在哪个值中初始化图形2d?我只写了图形2D@坎凯兰:对,这是一个实例变量,它的默认值为空。如果处理绘制事件,则应将该方法中要绘制的图形作为参数提供给您。我应在哪个值中初始化graphics2D?我只写了图形2D@坎凯兰:对,这是一个实例变量,它的默认值为空。如果你处理绘画事件,你应该得到在该方法中绘制的图形作为参数method@CanCeylan:无法在mouseDragged(…)方法中绘制线。那不行。存储从MouseEvent获得的点,并在paintComponent(…)中绘制线条。但我的起点是此链接:。在这个链接中,我可以用mouseDragged方法画线。我想在我的GUI中应用此模式。您的问题解决了吗?如果没有,您仍然需要帮助,请使用完整的代码更新您的问题。我还覆盖了paintComponent(图g)method@CanCeylan:无法在mouseDragged(…)方法中绘制线。那不行。存储从MouseEvent获得的点,并在paintComponent(…)中绘制线条。但我的起点是此链接:。在这个链接中,我可以用mouseDragged方法画线。我想在我的GUI中应用此模式。您的问题解决了吗?如果没有,并且您仍然需要帮助,请使用完整的代码更新您的问题。