【问题标题】:NullPointerException error while using Graphics class in java在 java 中使用 Graphics 类时出现 NullPointerException 错误
【发布时间】:2015-05-09 08:11:41
【问题描述】:

我对 java 完全陌生。我正在尝试编写一个简单的java程序,该程序接受坐标和高度的输入,矩形的宽度并绘制它。但我收到 NullPointerException 错误。这是我的代码:

import javax.swing.JFrame;
import java.util.Scanner;
import java.awt.*;
public class shape extends JFrame{
public int x,y,width, height;
public void setxyhw(int f, int g, int h, int i){
  this.x = f;
  this.y = g;
  this.width =h;
  this.height = i;
 }

public shape(){
setTitle("frame1");
setSize(960,960);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void paint(Graphics g){

g.drawRect(x,y,height,width);

}


public static void main(String[] args) {
    int a,b,c,d ;
    Scanner in = new Scanner(System.in);
    System.out.println("Input Co-ordinates and widh & height for rectangle");
    a= in.nextInt();
    b=in.nextInt();
    c=in.nextInt();
    d=in.nextInt();

    shape s=new shape();

    s.setxyhw(a,b,c,d);

    s.paint(null);
}

}

【问题讨论】:

  • 如果您对解决 NullPointerException (NPE) 进行了一些搜索,您就会知道我们需要的最重要的信息是异常的相关堆栈跟踪和行的一些标识这会导致它,堆栈跟踪会告诉你的东西,不幸的是你没有在这里发布你的问题。请解决此问题,以便我们为您提供帮助。
  • 好的。这是我在 shape.main(shape.java:38) 处的 shape.paint(shape.java:21) 处收到“线程“主”java.lang.NullPointerException 中的异常”的消息

标签: java swing nullpointerexception awt


【解决方案1】:

哎呀:

s.paint(null);

你直接调用paint,传入一个空参数,然后想知道为什么这个方法会抛出一个NullPointerException!

解决方案:

  • 不要这样做。永远不要直接调用paint。这是 JVM 要做的。
  • 在 JPanel 的 paintComponent 方法中绘制,而不是直接在 JFrame 中绘制。直接在 JFrame 中绘制可能会在绘制边框和子组件时产生不必要的副作用,并且在您稍后尝试制作动画时不会流畅地制作动画。
  • 如果您想重新绘制 GUI,请致电 repaint()
  • 阅读 Swing 图形教程。您可以在此处找到 Swing 教程和其他 Swing 资源的链接:Swing Info

【讨论】:

  • 他为什么不直接在自己的类上调用paint呢?我们说的是shape s=new shape(); s.paint()
  • @Alexander:因为他从哪里得到一个可行的 Graphics 对象? Graphics 对象应该在 JVM 的paintComponent 方法中提供给您。我能想到的唯一例外是,如果您想将组件绘制到 BufferedImage 上,然后您将使用从 BufferedImage 获得的 Graphics 对象来执行此操作。
  • @alexander paint 是由类层次结构(由 Window 定义)定义的公共对象,用于满足绘图子系统的要求,该系统不涉及用户或开发人员交互。当它想要绘制某些东西时,绘制子系统将自动调用该方法。在一般实践中,您永远不需要手动调用它
【解决方案2】:

您将null 作为s.paint(null); 的参数并在这些对象上调用g.drawRect(x,y,height,width);。此绘制方法的参数必须是 Graphics 对象。

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 2013-08-10
    • 2014-06-21
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    相关资源
    最近更新 更多