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中应用此模式。您的问题解决了吗?如果没有,并且您仍然需要帮助,请使用完整的代码更新您的问题。