-1

我试图制作一个简单的应用程序来试验 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);
}
}

有人可以告诉我如何解决这个问题以及错误的原因是什么?

谢谢!

4

3 回答 3

7

Graphics这条线上的对象

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

就像nullJComponent#getGraphics UI 可见之前使用的那样。这就是为什么通过覆盖. JPanel panel这将保证Graphics Object在使用之前先初始化。

于 2013-03-19T02:14:33.907 回答
3

永远不要使用getGraphics.

如您所见,它可以返回null。它充其量只是最后一个油漆周期的快照。您在其上绘制的任何内容都将在下一个绘制周期中被覆盖。

Swing 中的绘画是无状态的。也就是说,在每个绘制周期中,您都需要重新绘制所有想要绘制的东西。

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

+1 到 reimeus

于 2013-03-19T02:20:15.043 回答
1

NullPointerException是由Graphics g为空引起的,并且您尝试使用null对象来调用其中一种Graphics方法。

如果您搜索,您会发现panel.getGraphics()返回 null 是一个常见问题,并且有一些解决方案。请参阅:调用返回 null 的 getGraphics() 的任何替代方法

于 2013-03-19T02:14:15.973 回答