2015-01-01 7 views
0

jar 파일에 문제가 있습니다. NetBeans에서 프로젝트를 실행할 때 모든 것이 잘 동작합니다. 나는 단지 변수에 의해 난을 응용 프로그램을 실행할 때NetBeans에서 jar 파일이 작동하지 않습니다.

public void setBg(int w, int h){ 

    BufferedImage bgg = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
    Graphics g = bgg.getGraphics(); 
    for(int i = 0; i < board.getHeight(); ++i){ 
       for(int j = 0; j < board.getWidth(); ++j){ 
        g.drawImage(board.getBoardElement(j, i).getImage().getScaledInstance(element_w, element_h, Image.SCALE_SMOOTH), ((j*element_w)), ((i*element_h)), this); 
       System.out.println(j+" "+i); 
       } 
      } 

    bg=bgg; //it's important to not blinkink map while it's drawing 
} 

매번 및 NullPointerException이 발생할 때 j는 다른 값을 가지고 :하지만 jar 파일을 실행할 때이 기능에 널 포인터 예외를 가지고있다. 그 이유는 무엇일까요?

+0

try-catch에서 메소드를 캡슐화하고 예외에 대한 스택 추적을 인쇄 해 보았습니까? – Dawnkeeper

+0

src 폴더에 사진을 추가 한 다음 깨끗하게 정리하고 다시 시도하십시오. – StasKolodyuk

답변

4

코드에서 일부 디버그 명령문 (System.out.println 또는 log4j 또는 내장 된 로깅 API와 같은 로깅 API 사용)을 추가하여 다양한 변수의 상태를 확인하고 코드의 실행 순서를 식별하십시오.

코드에 중단 점을 추가하고 디버거를 사용하여 코드를 단계별 실행하고 다양한 변수 및 코드 논리의 상태를 확인하십시오.

난 당신이 ImageIcon(String) 같은 것을 사용하여 이미지를로드했습니다 때문에, board.getBoardElement(j, i).getImage()null를 반환하기 때문에 예외를 받고 있지만, 이미지 파일 중 하나 JAR 파일의 컨텍스트 내에서 유지 또는으니 "추측"

디스크 외부의 상대 위치에서로드 했으므로 더 이상 현재 Jars 위치에서 액세스 할 수 없습니다.

이미지가 012be또는 일부 하위 디렉토리 인 Netbeans 프로젝트의 src 디렉토리에 저장되어 있는지 확인하십시오. 그러한

다음으로 ImageIO.read에 이미지를로드하는 경우 어떤 이유로 든 이미지를로드 할 수없는 경우 (ImageIcon과 같이 조용히 실패하는 경우) IOException이 표시됩니다. 자세한 내용은 Reading/Loading an Image을 참조하십시오.

다음, jar 파일의 이름은 디렉토리에 포함되어

BufferedImage img = ImageIO.read(getClass().getResource("/resources/images/NameOfImage.jpg")); 
+0

오 하느님, 제 수업 중 일부에서 이것을 잊어 버렸습니다. 내 시간을 절약 해 주셔서 감사합니다! –

0

공지 것을 ... 이미지를로드 Class#getResource을 사용하여 "DIST는"여기서 넷빈즈를 통해 실행의 루트 디렉토리의 상위 디렉토리로 "dist". 따라서 파일 경로에 대한 모든 참조는 NetBeans에서 프로그램을 실행하는지 또는 jar 파일을 실행하는지에 따라 달라집니다. MadProgrammer 언급으로

g.drawImage(board.getBoardElement(j, i).getImage() ... 

읽기 :

+0

사실, 나는 당신의 질문을 신중하게 읽지 않았다는 것을 깨달았다 ... 나의 나쁜. –

0

당신은 스택 추적 (소스 + 라인 번호 + 방법)의 목록을 가리 것이다 정확한 지점을 언급하지 않기 때문에, 나는 그것이 가정 Class.getResource 또는 Class.getResourceAsStream 인 이미지 경로는 클래스의 패키지와 관련이 있거나 절대 경로 "/...."입니다. Windows의 파일 경로는 대소 문자를 구분하지만 다른 운영 체제와 jar에서는 대소 문자를 구분합니다.

createGraphics resp 후에 g.dispose()으로 전화하십시오. getGraphics (이전 이름과 동일 함).

Graphics g = bgg.getGraphics(); 
... 
g.dispose(); 
관련 문제