什么原因导致“NullPointerException”错误,我该如何解决?

时间:2013-03-19 02:11:46

标签: 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
当我尝试运行以下代码时出现

错误:

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

有人能告诉我如何解决这个错误的原因是什么?

谢谢!

3 个答案:

答案 0 :(得分:7)

此行上的Graphics对象

g.drawRect(100, 100, 100, 100);

null,因为您在 UI可见之前使用了JComponent#getGraphics 。这就是为什么通过覆盖JPanel panel的{​​{3}}进行自定义绘画总是更好。这样可以保证Graphics Object在使用之前先被初始化。

答案 1 :(得分:3)

永远不要使用getGraphics

如您所见,它可以返回null。它充其量只是最后一个油漆循环的快照。在下一个油漆循环中,任何涂在其上的东西都会被覆盖。

Swing中的绘画是无国籍的。也就是说,在每个绘画周期中,您需要重新绘制您想要绘制的所有内容。

查看Custom Painting,了解在Swing中执行自定义绘画的概述

+1到reimeus

答案 2 :(得分:1)

NullPointerExceptionGraphics g为空引起,并且您尝试使用null对象调用Graphics方法之一。

如果您搜索,您会看到panel.getGraphics()返回null是一个常见问题,并且有一些解决方案。请参阅:Any alternative to calling getGraphics() which is returning null