2014-02-18 6 views
2

JLabel을 사용하여 이미지를 표시하려고합니다. SettingsDialog.java에서 enter image description here이미지를 JLabel에로드 할 수 없습니다.

내가 다음 코드를 사용하여 이미지를 표시 할 :이 내 프로젝트 네비게이터입니다

 String path = "/images/sidebar-icon-48.png"; 
     File file = new File(path); 
     Image image; 
     try { 
      image = ImageIO.read(file); 

      JLabel label = new JLabel(new ImageIcon(image)); 
      header.add(label); // header is a JPanel 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

코드에서 예외가 발생합니다 : 입력 파일을 읽을 수 없습니다!

이미지의 경로가 잘못 되었습니까? 당신이 File 객체를 사용하면 클래스 경로

image = ImageIO.read(getClass().getResource(path)); 
-or- 
image = ImageIO.read(MyClass.class.getResource(path)); 

에서 읽은 파일에서 읽을하지 마십시오

+0

파일의 경로가 잘못되었습니다. 예외는 아주 분명합니다. –

+2

__Eclipse__ 관련 부분에 대한 내 대답 [(대답)] (http://stackoverflow.com/a/9866659/1057230) 좀 더 빛을 발산이 될 수도 있습니다.이 링크는 [tag : embedded-resource] –

답변

4

는, 당신은 당신의 경로가 잘못 것 파일 시스템에서 읽을 수있는 프로그램을 말하는 것 . 을 사용하는 경로는이어야합니다. 클래스 경로에서 읽는 경우 과 같이이되어야합니다.

embedded resource 위키를 참조하십시오. 또한 getResource()


UPDATE 테스트 실행

enter image description here

package org.apache.openoffice.sidebar; 

import javax.swing.*; 

public class SomeClass { 
    public SomeClass() { 
     ImageIcon icon = new ImageIcon(
       SomeClass.class.getResource("/images/sidebar-icon-48.png")); 
     JLabel label = new JLabel(icon); 

     JFrame frame = new JFrame("Test"); 
     frame.add(label); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new SomeClass(); 
      } 
     }); 
    } 
} 
+0

의 정보에서도 사용 가능합니다. 귀하의 답변에 감사드립니다. 그러나 코드는 작동하지 않습니다. getClass(). getResource (path) 결과를 인쇄하려고하면 "NULL"이 표시됩니다. – MaTTP

+0

이 ""/images/sidebar-icon-48.png "가 사용중인 파일 경로이고 위의 이미지가 실제 파일 구조는 작동해야합니다. 나는 그걸로 문제가 없었어요. –

+0

@MaTTP 내 ** 업데이트 ** 참조 –

1

를 참조 루트 경로 "/images/sidebar-icon-48.png"입니다. 창에서 현재 드라이브에 따라 c : \ images \ sidebar-icon-48.png 또는 d : \ images \ sidebar-icon-48.png이됩니다 (java는 /가 \가 아니라 문제로 변환됩니다). 리눅스 이미지는 root의 자식이됩니다 /images/sidebar-icon-48.png 클래스를 가지고있는 jar 파일에 상대적으로로드해야합니다 (jar 파일 내부에 이미지를 저장하지 않으려는 경우)

큰 이미지 항아리 밖에서 이미지와 다른 자원을 가질 수 있도록 프로젝트를 진행하므로 항아리가 작고 더 중요한 것은 항아리/전쟁을 치지 않고 리소스를 쉽게 변경할 수 있습니다.

오픈 오피스 용으로 추가하는 것처럼 보이므로, 항아리에 모든 것을 보관해야하므로 peeskillet 대답이 맞습니다.하지만 이미지 폴더가 항아리에 포장되어 있는지 확인하십시오. jar 명령을 사용중인 항아리를 추출하거나 파일 이름을 zip으로 변경하고 압축을 푸십시오.

또는 프로젝트 설정을 확인하고 수정하십시오.

JLabel label = new JLabel(new ImageIcon(path)); 

을 이러한 라인 삭제 :

File file = new File(path); 

image = ImageIO.read(file); 

여전히 오류가있는 경우 어떻게 이클립스에 항아리를 만드는 ... 최신 하나는 직접를 사용하는 wizard that makes an ant script 또는이 SO

1

시도가 존재하는 다음 오류 붙여 넣기