0

私は次の2つのコードを持っています

最初のコード:

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

    }
}

そして2番目のコード:

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


}

}

2番目のコードは、コンパイル中に次のエラーを示しています。に線と2つの長方形を描く必要はありませんpanelForBackGroundか?このエラーの原因は何ですか?

エラー:

スレッド「メイン」の例外java.lang.NullPointerException
    guicollection.RectanglePattern.drawRectangle(RectanglePattern.java:20)で
    guicollection.GUIcollection.main(GUIcollection.java:24)で
4

1 に答える 1

0

ここでの null ポインターの受け入れは、通常、グラフィック環境を正しく作成していないことに関係しています。このメソッドを呼び出してみてください:

window.setVisible(true);

または、マシンがまだ完全に作成する時間がないウィンドウに描画しようとしている可能性があります。私はその問題を抱えていました。Graphics 変数を作成する直前にこれを実行して、ウィンドウが追いつくのを待つようにプログラムに指示してみてください。

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

特定の例外ではなく、「例外」だけをキャッチすることは最善の方法ではありませんが、xDを簡単に解決する方法です笑。それらが機能するかどうか教えてください。そうでなければ、私は戻ってきて、後でもっと助けます。

于 2012-12-07T19:03:31.973 に答える