在尝试绘制线条时出现Nullpointerexception

时间:2012-12-06 22:33:14

标签: java nullpointerexception

我有以下两段代码

第一个代码:

package guicollection;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class RectanglePattern extends GUIcollection implements ActionListener {

    JPanel panelForBackGround;
    JButton actionButton;

    void drawRectangle() {

        RectanglePattern outSideCover = new RectanglePattern();
        outSideCover.setSize(500, 500);
        outSideCover.createGUI();
        outSideCover.setVisible(true);

    }

    private void createGUI() {

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout());

        panelForBackGround = new JPanel();
        panelForBackGround.setPreferredSize(new Dimension(400, 300));

        panelForBackGround.setBackground(Color.blue);

        window.add(panelForBackGround);

        actionButton = new JButton("Press me");
        window.add(actionButton);
        actionButton.addActionListener(this);


    }

    public void actionPerformed(ActionEvent event) {
        Graphics paper = panelForBackGround.getGraphics();

        paper.drawLine(0, 0, 9, 10);
        paper.drawRect(8, 8, 12, 9);
        paper.drawRect(6, 6, 12, 6);

    }
}

第二个代码:

package guicollection;

import java.awt.*;
import javax.swing.*;

public class RectanglePattern extends GUIcollection{

    JPanel panelForBackGround;
    JButton actionButton;

    void drawRectangle() {

        RectanglePattern outSideCover = new RectanglePattern();
        outSideCover.setSize(500, 500);
        outSideCover.createGUI();
        outSideCover.setVisible(true);

    }

    private void createGUI() {        

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout());

        panelForBackGround = new JPanel();
        panelForBackGround.setPreferredSize(new Dimension(400, 300));

        panelForBackGround.setBackground(Color.blue);

        window.add(panelForBackGround);

        actionButton = new JButton("Press me");
        window.add(actionButton);
        actionButton.addActionListener(this);





        Graphics paper = panelForBackGround.getGraphics();

        paper.drawLine(0, 0, 9, 10);
        paper.drawRect(8, 8, 12, 9);
        paper.drawRect(6, 6, 12, 6);


}

}

第二个代码在编译时显示以下错误。是不是必须在panelForBackGround上画一条线和两个矩形?这个错误的原因是什么?

错误:

Exception in thread "main" java.lang.NullPointerException
    at guicollection.RectanglePattern.drawRectangle(RectanglePattern.java:20)
    at guicollection.GUIcollection.main(GUIcollection.java:24)

1 个答案:

答案 0 :(得分:0)

这里的空指针接受通常与不正确创建图形环境有关。尝试调用此方法:

window.setVisible(true);

OR 可能是因为你试图在窗口上绘制机器还没有时间完全创建。我有这个问题。在创建Graphics变量之前,尝试告诉程序等待窗口赶上:

try{
Thread.sleep(300);
catch(Exception e){
System.out.println(e.printStackTrace());
}

我知道只是"例外"并不是一个特定的例外不是最好的事情,但它是xD lol的简单方法。告诉我,如果这些工作。如果没有,我会在以后再回来帮忙。