在 java 中使用图形 class 时出现 NullPointerException 错误

NullPointerException error while using Graphics class in java

我是 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);
}

}

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

赞:

s.paint(null);

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

解决方案:

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