2013-08-21 9 views
2

를 인쇄하려고하면 메인 클래스nullpointerException가 계속 나타 납니까? 내가 여기에 이미지

public class Testing extends JFrame{ 

private static final long serialVersionUID = 1L; 

public Testing(){ 
    setContentPane(new Canvas()); 
    setVisible(true); 
    setLocationRelativeTo(null); 

} 
public static void main(String[] args0){ 
    new Testing(); 
} 

}

하고 오류가 Canvas 클래스의의 drawImage 메소드에서 발생합니다. 나는 내 이미지를 넣고 소스 폴더로 사용하는 res 폴더를 만들었습니다.

public class Canvas extends JPanel{ 
Graphics g; 
Graphics2D g2 = (Graphics2D)g; 
BufferedImage image; 
private static final long serialVersionUID = 1L; 
public Canvas(){ 
    setPreferredSize(new Dimension(800,600)); 
    loadImage("/space.png"); 
    draw(g2); 
} 
public void draw(Graphics2D g2){ 
    g2.drawImage(image, 0,0,this); 
} 
public void loadImage(String path){ 
    try { 
     image = ImageIO.read(
      getClass().getResourceAsStream(path) 
     ); 
    } 
    catch(Exception e) { 
     e.printStackTrace(); 
     System.out.println("image loading error"); 
    } 

} 

}는 도움을 주셔서 감사합니다.

그리고 내가 프로그램을 실행할 때 오류가 발생했습니다.

Exception in thread "main" java.lang.NullPointerException 
at Canvas.draw(Canvas.java:21) 
at Canvas.<init>(Canvas.java:18) 
at Testing.<init>(Testing.java:11) 
at Testing.main(Testing.java:17) 
+2

원본 질문에 완전한 스택 추적을 추가하십시오. 또한 ** 오류를 생성하는 정확한 코드 행 **을 확인하십시오. –

+0

스택 추적을 인쇄하지 않습니다. 디버그는 drawImage()에 대한 nullpointerException만을 표시합니다. – Bango

+0

'g'가 'null'입니다. –

답변

2
  • 는 쓸모가

  • 그림이 paintComponent()되지 이루어집니다 PaintComponents()Oracle tutorial Working with Images에 더 많은 질문이있는 경우 여기를 검색 paintComponent()

  • JPanelImageObserver 다음 g.drawImage(image, 0,0,null);g.drawImage(image, 0, 0, this);

  • new testing();setSize(800,600); 이리저리 public class Canvas extends JPanel {

  • public class testing extends JFrame{

    getPreferredSize를 오버라이드 (override) JFrame의하지 Oracle tutorial Initial Thread

  • 에서 참조 invokeLater에 싸여해야해야입니다

    1. 51,515,는

    2. public class Testing {

EDIT (BufferedImage image; similair 같은) 로컬 변수 JFrame을 작성해야한다.

JPanel panel = new JPanel() { 
    private static final long serialVersionUID = 1L; 
    private Image image = new ImageIcon("Images/mong.jpg").getImage(); 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(800, 600); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, getWidth(), getHeight(), this); 
    } 
}; 
+0

당신이 말한 모든 것을했지만 그 오류는 여전히 존재합니다. – Bango

+0

drawImage가 아니지만 paintComponent, 예외에 대한 아이디어가 없으며 스택 추적 게시 – mKorbel

+0

알았어, 오류 메시지를 추가했습니다. – Bango

2

여기서 Graphics2D 객체 'g'를 초기화 했으므로 올바르게 초기화해야합니다.

0

Graphics2D

보호의 Graphics2D() 새로운 Graphics2D 객체를 구축.

Graphics2D는 추상 클래스이기 때문에 다른 출력 장치의 하위 클래스 인 으로 사용자 정의해야하므로 Graphics2D 객체를 직접 생성 할 수 없습니다. 대신 Graphics2D 객체는 다른 Graphics2D 객체에서 가져 오거나 Component에서 만들거나 이미지 (BufferedImage 객체 등)에서 가져와야합니다.

사용

: Swing에서, PaintComponents(g);으로 같은 것을 호출이 코드 라인을 제거하기 위해이 필요하지 않습니다

Graphics2D g2 = (Graphics2D)g; 
g2.drawImage(); 
+0

오류가 여전히 있습니다. – Bango

관련 문제