Java 是什么导致了“a”;NullPointerException“;这里有错误,我如何修复它?
我试图制作一个简单的应用程序,只是为了试验Java图形,但我遇到了这个错误,因此如果有人能帮我解决这个问题,我将不胜感激。:) 我得到以下信息Java 是什么导致了“a”;NullPointerException“;这里有错误,我如何修复它?,java,nullpointerexception,Java,Nullpointerexception,我试图制作一个简单的应用程序,只是为了试验Java图形,但我遇到了这个错误,因此如果有人能帮我解决这个问题,我将不胜感激。:) 我得到以下信息 Exception in thread "main" java.lang.NullPointerException at Main.draw(Main.java:41) at Main.createGUI(Main.java:36) at Main.main(Main.java:20) Java Result: 1 尝试运行以下代码时出错: imp
Exception in thread "main" java.lang.NullPointerException
at Main.draw(Main.java:41)
at Main.createGUI(Main.java:36)
at Main.main(Main.java:20)
Java Result: 1
尝试运行以下代码时出错:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
public JPanel panel;
public static void main(String[] args) {
Main m = new Main();
m.setSize(500, 700);
m.setDefaultCloseOperation(EXIT_ON_CLOSE);
m.createGUI();
m.setVisible(true);
}
private void createGUI() {
Container window = getContentPane();
panel = new JPanel();
panel.setPreferredSize(new Dimension(500, 700));
panel.setBackground(Color.WHITE);
window.add(panel);
Graphics paper = panel.getGraphics();
draw(paper);
}
private void draw(Graphics g){
g.drawRect(100, 100, 100, 100);
}
}
有人能告诉我如何解决这个问题,错误的原因是什么
谢谢大家! 出现
NullPointerException
的原因是Graphics g
为null,您试图使用null
对象调用Graphics
方法之一
如果搜索,您将看到
panel.getGraphics()
返回null是一个常见问题,并且有一些解决方案。请参阅:此行上的图形
对象
g.drawRect(100, 100, 100, 100);
是null
,正如您在UI可见之前使用的JComponent\getGraphics
。这就是为什么通过覆盖JPanel
面板的。这将保证图形
对象
在使用前先初始化
永远不要使用getGraphics
正如您所发现的,它可以返回null
。这充其量只是上一个绘画周期的快照。对其绘制的任何内容都将在下一个绘制周期中被覆盖
摇摆中的绘画是无状态的。也就是说,在每个绘制周期中,您都需要重新绘制您想要绘制的每个对象
查看以获取在Swing中执行自定义绘制的概述
+1 to reimeus注意:您始终可以读取堆栈跟踪,它将告诉您引发异常的确切行。在NullPointerException的情况下,您可以查看行中被取消引用的每个对象,并很快地找出它。术语“取消引用”在JLS中不存在,我认为不应该使用它,因为它来自具有语言级指针的其他语言时可能会混淆。(一般来说,我可以接受更多抽象术语,但不能接受更少抽象术语。)