Java - GUI(swing) - 空指针异常

时间:2013-05-03 18:40:42

标签: java swing user-interface nullpointerexception

我上了2节课:
- 1日制作一个框架(JFrame)并在其上添加一个面板(JPanel) - 第二个制作面板并在其上绘制一个矩形(至少我认为会这样)

这是第一堂课

class Frame {
JFrame frame;
Panel panel;

void draw() {
    frame = new JFrame ("qwertz");
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setSize(300,200);

    panel = new Panel();
    panel.setLayout(null);
    panel.paint();
    frame.add(panel);
    }}

和第二个

class Panel extends JPanel {
void paint() {
    Graphics g = getGraphics();

    g.drawRect(50,50,90,70);
}}

当我从第一个类调用draw()方法时,它会向我抛出此异常:

java.lang.NullPointerException  
          at Panel.paint(Panel.java:8) ((  g.drawRect(50,50,90,70);  ))
          at Frame.draw(Frame.java:15) ((  panel.paint();            ))

3 个答案:

答案 0 :(得分:2)

这不是你应该怎么画的。要绘制组件,请覆盖paintComponent(Graphics g)的{​​{1}}方法,然后调用JPanel

repaint();

class MyPanel extends JPanel {
    @Override // <-- this makes a compiler error if you typod the method name
    public void paintComponent(Graphics g) {
        g.drawRect(50,50,90,70);
    }
}

此外,如果您只需要在此面板上绘画,我会考虑使用普通的panel = new MyPanel(); panel.setLayout(null); panel.repaint(); // <<---- Look here! It says repaint() not paint() frame.add(panel); ,并覆盖Component而不是paint(Graphics g)paintComponent(Graphics g)专门针对摇摆组件。

答案 1 :(得分:1)

而不是实现paint方法,你应该实现paintComponent(Graphics g)方法。这样,您拥有的图形对象就是有效的。

http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics)

答案 2 :(得分:0)

您正在尝试在将面板添加到框架之前绘制它。尝试将frame.paint();移到frame.add(panel);下方。此外,如果您使用Swing,则应使用JPanel而不是Panel。