2011-12-27 2 views
1

최근에 작성한 .ico 파일로 기본 응용 프로그램 아이콘을 설정하려고했습니다. 이것은 내가 아이콘을 만드는 데 사용되는 코드입니다 :아이콘을 설정할 때 java.lang.NullPointerException이 발생합니까?

initComponents(); 
java.net.URL url = ClassLoader.getSystemResource("/src/calculatormedii/resources/CMedii.ico"); 
Toolkit kit = Toolkit.getDefaultToolkit(); 
Image img = kit.createImage(url); 
getFrame().setIconImage(img); 

나는 그것이 넷빈즈에서 자바 데스크톱 응용 프로그램 아이콘을 설정하는 매우 어려운 이유는 아무 생각을, 그냥 나머지 같은 속성 필드해야한다. 나는이 프로그램을 실행하려고하면 이러한 오류가 표시되지 : 지금 무엇을해야 하는지를

Uncaught error fetching image: 
java.lang.NullPointerException 
    at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99) 
    at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:113) 
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240) 
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172) 
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136) 

어떤 생각을. 응용 프로그램 아이콘을 설정하는 대체 방법이있는 경우 지정하십시오 (netbeans 또는 무언가의 속성 필드와 비슷 함)

+0

응용 프로그램에'src' 폴더/패키지가 있습니까? 내가 컴파일 한 소스 폴더가 아니라 컴파일 된 응용 프로그램의 폴더를 의미합니다. – Thomas

+0

확인. 이 문제는 수정되었습니다. 문제는 경로가 아니 었습니다. 존 스키켓 (Jon Skeet)이 세트 코드를 주었기 때문에 나는 이것을 사용했고 아이콘은 디폴트로 남아 있었다. 문제는 내 파일이 ICO 파일이라는 것입니다. 16X16 버전의 아이콘을 PNG로 저장 한 다음 리소스에 추가하여 문제를 해결했습니다. 감사합니다. 얘들 아, StackOverflow는 프로그래밍 분야의 보석입니다. 1 분 안에 답을 얻을 수 있습니다! – Bugster

답변

4

나는 그것이 귀하가 사용하고있는 URL이라고 생각합니다. ClassLoader.getSystemResource을 사용하면 선행 슬래시가 필요 없습니다. 그러나 나는 src 부분을 원한다는 것을 매우 의심합니다. 당신은 당신의 아이콘이 클래스 파일은 같은 장소 (예를 들어, bin 디렉토리)에 복사 한 후 바로 사용할 수 있는지 확인해야합니다

URL url = ClassLoader.getSystemResource("calculatormedii/resources/CMedii.ico"); 
+0

OK 아이콘 파일을 해당 폴더로 옮겼습니다. 이제는 오류가 표시되지 않지만 아이콘은 변경되지 않았습니다. 그것은 여전히 ​​커피 컵 자바 애플 리케이션입니다. 어떤 도움이 필요합니까? 아이콘을 2 개의 위치로 옮겼습니다 : bin 폴더와 다른 모든 클래스가있는 폴더. – Bugster

+0

나는 그가'calculatormedii /'부분을 원하지 않는다고 생각한다. – Thomas

+0

@ 토마스 : 오류가 사라 졌다고 가정하면 * 소리가 나무의 일부입니다. –

0

당신은 당신의 스택 트레이스를 더 인쇄하여야한다. 더 내려다 보면 java librairies에서 예외로 인도하는 코드에서 호출자 행을 찾을 수 있습니다.

그러나 귀하의 경우

는 문제는 매개 변수로 인 getSystemResource에게주는 경로가 당신이 코딩 클래스의 실제 클래스 파일이 들어있는 폴더에 대한 상대해야한다는 사실에서 비롯됩니다.

더 정확하게 , 당신은 둘 다 사용할 수 있습니다

  • ClassLoader.getSystemResource 다음 경로는 클래스 경로 항목
  • getClass.getResourceUrl에 상대적이어야하고 경로 당신이 코딩 클래스의 클래스 파일에 상대적해야하는 in.
  • X.class.getResourceUrl과 경로 당신이 받는다는 이클립스를 사용하는 경우 클래스 X.

의 클래스 파일에 상대적이어야한다, 기본 폴더 구조는

/src/main/java 
/src/main/resources 

을하는 것입니다 그런 다음 모든 것이 처리됩니다. Java 파일이 컴파일 될 때와 동일한 폴더에 리소스 파일을 복사합니다.

+0

클래스가있는 상대 경로를 추가하면 오류가 다시 발생합니다. 나는 대략 5 개의 경로를 설정하려고 시도했다. Jon Skeet의 답변 외에도 5 개의 오류가 표시된다. – Bugster

+0

시도해보십시오. 또한 클래스 파일이있는 폴더에 리소스가 복사되는지 어떻게 알 수 있습니까? 컴파일 후 수동으로 복사하십시오. 클래스 파일이있는 파일에 ico 파일을 넣고 폴더가없는 경로를 사용하여 ico 파일에 액세스하십시오. – Snicolas

관련 문제