2013-08-23 4 views
-1

이상한 문제가 있습니다. 나는 '어둠'(검은 색 Rect)의 화면에서 이미지가 튀는 종류의 게임을 가지고 있고 마우스 커서는 어둠을 통해 빛나는 손전등을 나타냅니다 (타원을 뺍니다).문제를 읽는 중 BufferedImage

이제 .png 이미지 하나와 .wav 사운드 파일 하나가 있습니다. 둘 다 내 프로젝트 폴더의 "resources"폴더에 있고 파일 경로 "resources/myImage.png""resources/mySound.wav"을 통해 액세스합니다.

Eclipse에서 프로그램을 실행할 때 모든 것이 잘 작동합니다 (Kepler btw 사용). 이미지는 잘 보이고 소리가 들리지만, 항아리로 내보내고 실행하면 바로 활성 프로그램 인 것처럼 몇 초 동안 프로그램 이름이 표시되지만 종료/충돌 직후에 프로그램 이름이 표시됩니다 . 터미널을 열고 java -jar /Users/MyUsername/Desktop/MyProg.jar을 실행하면 같은 결과를 얻지 만 터미널의 충돌 로그로 연결됩니다. 그것은 읽

refence를 들어
Aug 23, 2013 4:10:02 PM com.spotlight.TestPane <init> 
SEVERE: null 
javax.imageio.IIOException: Can't read input file! 
    at javax.imageio.ImageIO.read(ImageIO.java:1301) 
    at com.spotlight.TestPane.<init>(TestPane.java:62) 
    at com.spotlight.Spotlight$1.run(Spotlight.java:32) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:682) 
    at java.awt.EventQueue$3.run(EventQueue.java:680) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at com.spotlight.TestPane.<init>(TestPane.java:69) 
    at com.spotlight.Spotlight$1.run(Spotlight.java:32) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:682) 
    at java.awt.EventQueue$3.run(EventQueue.java:680) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at com.spotlight.TestPane.move(TestPane.java:169) 
    at com.spotlight.TestPane$1.actionPerformed(TestPane.java:51) 
    at javax.swing.Timer.fireActionPerformed(Timer.java:312) 
    at javax.swing.Timer$DoPostEvent.run(Timer.java:244) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:682) 
    at java.awt.EventQueue$3.run(EventQueue.java:680) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

, 이미지 파일을 읽어 내 코드는 다음과 같습니다

  • 내가 마우스 오른쪽 버튼으로 클릭

    BufferedImage img; 
    //... 
    try { 
         img = ImageIO.read(new File("resources/myImage.png")); 
        } catch (IOException ex) { 
         Logger.getLogger(Spotlight.class.getName()).log(Level.SEVERE, null, ex); 
        } 
    

    다음과 같이 내 프로그램을 내보낼 방법은 내 프로젝트 폴더를 선택하고 "내보내기"를 선택하십시오.

  • "Runnable Jar"옵션을 선택하십시오
  • 나는 corr을 선택합니다 요법 실행 구성 나는 "생성 된 JAR로 추출 필요한 라이브러리"를 선택 올바른 수출 대상 (/Users/MyUsername/Desktop/MyProg.jar)에서
  • "라이브러리 처리"를 찾아
  • "다른 이름으로 저장 ANT 스크립트는 Finish "를
  • 내가 클릭되지 않은 남아있다" "와 항아리 경고없이 발생

내가 SO 충돌 로그를 게시 정말 아닌 건 알지만 그렇다고 여기 난처한 상황에 빠진거야, 그래서 어떤 도움 감사합니다.


UPDATE

: 은 내가 try/catch 블록에 System.err.println 문을 추가하고, 항아리의 내용을 추출하는 Unarchiver을 사용하고 리소스 폴더가 표시되지 않습니다. 리소스가 내보내지지 않으면 내 문제 일 수 있지만 해결 방법을 모르겠습니다.

+1

배포 시점까지는 해당 리소스가 [태그 : 포함 리소스]가 될 수 있습니다. 그렇다면 리소스는'File' 대신'URL'에 의해 접근되어야합니다. 'URL'을 구성하는 방법은 태그에 대한 [info page] (http://stackoverflow.com/tags/embedded-resource/info)를 참조하십시오. –

+0

http://stackoverflow.com/questions/18093092/xml-filenotfoundexception-using-slick2d-library-in-java/18093227#18093227 –

+0

정보를 제공해 주셔서 감사합니다.하지만 자바에서 멍청이이고 좀 더 필요합니다. 도움. "URL imageURL;"을 가지고 있으며 나중에 imageURL = this.getClass(). getResource ("resources/images/myImage.png");'로 초기화됩니다. 내 미디어는 "resource"소스 폴더에 저장됩니다. "이미지"와 "사운드"라는 2 개의 폴더가 있습니다.프로그램을 실행하려고하면'java.lang.IllegalArgumentException : input == null'을 반환하는 파일을 찾을 수없는 것처럼 보입니다. 오류는'img = ImageIO '가있는 줄에서옵니다. read (imageURL);'. 텍스트 벽은 유감 스럽지만 아이디어는 없습니까? – ImagineBaggins

답변

1

일반적인 문제는 일반적으로 여기에 게시됩니다. 파일이없는 파일로 리소스에 액세스하려고합니다. 중지. Jar 파일은 파일을 보유하지 않으므로 파일의 어떤 것도 파일로 액세스하려고 시도하지 마십시오. 데이터를 대신 리소스로 가져옵니다. 내가 말했듯이 구글은이 문제를 일주일에 여러 번 여기에 게시하기 때문에 문제가된다.