2008-11-11 6 views
0

모두 안녕하세요, 다음 프로그램을 실행하려고하지만 NullPointerException이 발생합니다. 나는 아주 바보 같은 일을 할 수 있도록 Java swing 라이브러리를 처음 사용합니다. 어느 쪽의 방법이라도 나는 단지 지금 주변에서 놀고있는 나의 2 개의 클래스 학생들이다. 그리고 누구나는 원한다 (나는 결국 그것을 교수형에 처하는 사람과 함께 gallow를 그리고 싶어한다).Java 스윙 라이브러리의 패널 그래픽 사용 문제

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 행에 있습니다. 사전에

감사합니다,

메크 g이 설정되어 있기 때문에 당신은 NPE를 받고있어

답변

4

따라서, 그것은 null입니다. 또한 생성자에서 드로잉을 수행하면 안됩니다. 과부하 paintComponent(Graphics g) 대신.

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

나는 또한 BufferedImage을 살펴볼 것입니다.

+0

JPanel을 만들 때마다 paintComponent가 호출됩니다. – Tomek

+0

사실, 구성 요소를 다시 그릴 때마다 호출됩니다. 스윙은 각 구성 요소의 모양을 기억하지 않고 각 구성 요소는 필요할 때 그리기 및 다시 그리기를 담당합니다. – sblundy

0

몇 가지 : 패널을 JFrame에 추가하는 것을 잊지 마세요. 그리고 사용자 정의 페인팅을 위해 paint() 메소드를 JPanel으로 대체하십시오. 어떤 경우에도 JPanel의 paint 메소드가 하나의 참조를 가질 것이므로 Graphics 객체를 선언 할 필요가 없습니다.

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

페인트하지 않고 paintComponent를 재정의해야합니다. –