문제

여러분, 저는 다음 프로그램을 실행하려고하지만 NullPointerException을 받고 있습니다. 나는 Java Swing Library를 처음 사용하여 매우 멍청한 일을 할 수 있습니다. 어느 쪽이든 여기에 내가 지금 방금 놀고있는 두 개의 수업이 있으며, 내가하고 싶은 것은 빌어 먹을 원을 그리는 것입니다 (결국 교수형과 함께 갤러를 그리고 싶을 것입니다).

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

NullPointerException은 G.Filloval 라인에서 제공됩니다.

미리 감사드립니다.

토메

도움이 되었습니까?

해결책

당신은 NPE를 얻고 있습니다 g 그러므로 설정되지 않았습니다 null. 또한 생성자에서 도면을 수행해서는 안됩니다. 초과 적재 paintComponent(Graphics g) 대신에.

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

나는 또한 조사 할 것이다 BufferedImage.

다른 팁

몇 가지 : 패널을 JFrame. 그리고 paint() 의 방법 JPanel 당신의 맞춤형 그림을 위해. 이후로 그래픽 객체를 선언 할 필요가 없습니다. 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);       
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top