0

みなさん、次のプログラムを実行しようとしていますが、NullPointerException が発生します。私はJavaスイングライブラリを初めて使用するので、非常にばかげたことをしている可能性があります。いずれにせよ、ここに私が今遊んでいる私の2つのクラスがあります.

package hangman2;

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

public class Hangman2 extends JFrame{
    private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
    private Gallow gallow = new Gallow();

    public Hangman2() {

        setLayout(alphabetLayout);

        setSize(1000,500);
        setVisible( true );

    }

    public static void main( String args[] ) {   
     Hangman2 application = new Hangman2();
     application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}


package hangman2;

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

public class Gallow extends JPanel {
    private Graphics g;

    public Gallow(){
        g.fillOval(10, 20, 40, 25);       
    }
}

g.fillOval 行で NullPointerException が発生します。

前もって感謝します、

トメク

4

2 に答える 2

4

が設定されていないため、NPE を取得しています。gしたがって、それはnullです。さらに、コンストラクターで描画を行うべきではありません。paintComponent(Graphics g)代わりにオーバーロードします。

public class Gallow extends JPanel {
    public paintComponent(Graphics g){
        g.fillOval(10, 20, 40, 25);       
    }
}

BufferedImageも調べます。

于 2008-11-11T01:49:27.847 に答える
0

いくつかのこと: にパネルを追加することを忘れないでくださいJFrame。そして、カスタム ペインティングのpaint()メソッドをオーバーライドします。いずれの場合も、 の paint メソッドはいずれかへの参照を持つJPanelため、 Graphics オブジェクトを宣言する必要はありません。JPanel

package hangman2;

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

public class Hangman2 extends JFrame{
    private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
    private Gallow gallow = new Gallow();

    public Hangman2() {

        setLayout(alphabetLayout);
        add(gallow, BorderLayout.CENTER);//here
        setSize(1000,500);
        setVisible( true );

    }

    public static void main( String args[] ) {   
        Hangman2 application = new Hangman2();
        application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}


package hangman2;

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

public class Gallow extends JPanel {

    public Gallow(){
        super();
    }

    public void paint(Graphics g){
        g.fillOval(10, 20, 40, 25);       
    }
}
于 2008-11-11T02:39:36.797 に答える