2013-11-04 4 views
-1

안녕하세요, 여기에 새로운 자바와 내가 간과 한 간단한 일이 될 것이라고 확신합니다. 어떤 도움을 주셔서 감사합니다. 내 주 수업에 대한 코드는 여기에 있습니다. 오류 코드 바닥스레드 "main"의 예외 java.lang.NullPointerException

package GameScreen; 

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import javax.swing.JFrame; 


public class GameScreen extends JFrame 
implements Runnable, KeyListener 
{ 
private Thread animation = new Thread(this); 
private Container back = getContentPane(); 
private AniScreen aniscreen = new AniScreen(); 

public GameScreen() 
{ 
    super("moving image"); 
    setBounds(20,20,1024,768); 
    back.add (aniscreen, BorderLayout.CENTER); 
    animation.start(); 
    addKeyListener(this); 

    setVisible (true); 

} 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) 
    { 
     GameScreen gameScreen = new GameScreen(); 
    } 

    @Override 
    public void run() 
    { 
     while (true) 
     { 
     aniscreen.repaint(); 
     try 
     { 
      Thread.sleep(30); 
     } 
     catch(InterruptedException ex) 
      { 

      } 
     } 

    } 

    @Override 
    public void keyTyped(KeyEvent e) 
    { 
     } 

    @Override 
    public void keyPressed(KeyEvent e) 
    { 
     if (e.getKeyCode()==KeyEvent.VK_DOWN) 
     { 
     aniscreen.moveplayer(0,50); 
     } 
     if (e.getKeyCode()==KeyEvent.VK_UP) 
     { 
     aniscreen.moveplayer(0,-50); 

     } 

    } 

    @Override 
    public void keyReleased(KeyEvent e) 
    { 
     aniscreen.moveplayer(0,0); 
    } 
} 

이에서의 오류 코드 :

Exception in thread "main" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(ImageIcon.java:205) 
    at GameScreen.AniScreen.<init>(AniScreen.java:15) 
    at GameScreen.GameScreen.<init>(GameScreen.java:15) 
    at GameScreen.GameScreen.main(GameScreen.java:33) 
Java Result: 1 

이 인 aniscreen 클래스

package GameScreen; 

import java.awt.Graphics; 
import javax.swing.ImageIcon; 
import javax.swing.JComponent; 


public class AniScreen extends JComponent 
{ 
private int x = 0; 
private int y = 0; 
private int xMovement; 
private int yMovement; 

    private ImageIcon CINEMA = new ImageIcon (getClass().getResource ("CINEMA.jpg")); 
    private ImageIcon survivor = new ImageIcon(getClass().getResource("survivor.jpg")); 
    @Override 
    public void paint (Graphics g) 
    { 
     x = x + xMovement; 
     y = y + yMovement; 
     g.drawImage(CINEMA.getImage(),x,y,100,100,null); 
     g.drawImage(survivor.getImage(),x,y,100,100,null); 
    } 
public void moveplayer (int xmov, int ymov) 
{ 
    xMovement = xmov; 
    yMovement = ymov; 
} 

} 
+1

null이 무엇인지 확인하기 위해 디버깅을 했습니까? –

+2

AniScreen 생성자가 실패합니다. 그 코드는 어디에 있습니까? – MadConan

+3

문제점은 'AniScreen'에 있으며, 아직 설명하지 않았습니다. – roippi

답변

1

문제는 (대부분)입니다 여기도 발생 : 여기

private ImageIcon CINEMA = 
     new ImageIcon (getClass().getResource ("CINEMA.jpg")); 

또는 :

private ImageIcon survivor = 
     new ImageIcon(getClass().getResource("survivor.jpg")); 

당신은 null 참조하여 ImageIcon 생성자를 호출한다. getResource이 사용자가 지정한 리소스를 찾지 못해서 이러한 현상이 발생합니다. 그런 일이 발생하면 예외를 throw하는 대신 null을 반환합니다. javadoc에 설명되어 있습니다.

관련 문제