2013-12-01 1 views
0

내부 리소스가있는 실행 가능 .jar을 만들려고합니다. 빠른 질문 : 왜이 코드에 대해 NullPointerException이 발생합니까?getResourceAsStream이 스트림을 전혀 변경하지 않습니다.

String filename = "/settings.xml" 
    try (InputStream is = this.getClass().getResourceAsStream(filename); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));) 
    { 
     settingArray = (boolean[]) xStream.fromXML(reader); 
    } 

Eclipse를 사용하며 파일 settings.xml은 내 프로젝트의 루트 디렉토리에 있습니다. 다음 코드는 아니지만 항아리에 수출 한 후, 완벽하게 작동합니다 :

try (final BufferedReader reader = new BufferedReader(new FileReader(filename))) 
    { 
     settingArray = (boolean[]) xStream.fromXML(reader); 
    } 
+0

다음 변경하기 : filename = "/../settings.xml"성공하지 못함 :( –

답변

2

this.getClass().getResourceAsStream("/settings.xml")를 사용하여로드 할 파일이 프로젝트의 루트가 아니어야합니다. 런타임시 Java는 응용 프로그램 소스가 포함 된 Eclipse 프로젝트를 알지 못합니다.

무엇이 중요한지는 런타임 클래스 경로입니다. 파일은 클래스 경로의 루트에 있어야합니다. 거기, 당신은 클래스를 빈의 루트에있는 항아리

  • 에서 응용 프로그램을 실행 (또는 경우 파일은 jar 파일의 루트에

    • 을해야하거나 디렉토리 이름을 가입시 선택하신 IDE에서 응용 프로그램을 실행하면 eclipse는 컴파일 된 .class 파일을 저장합니다). 가장 쉬운 방법은 소스 디렉토리의 루트에있는 파일을 기본 패키지에 저장하는 것입니다. Eclipse는이 소스 파일을 복사하여 bin 디렉토리에 "컴파일"합니다.
  • 관련 문제