2014-09-21 3 views
0

그래서 인터넷을 통해 프로젝트를 Runnable Jar 파일로 추출하는 방법을 모두 읽었습니다.Eclipse 프로젝트를 Runnable Jar로 내보내기

나는 그것들을 잘 추출 할 수 있었지만, 그것을 실행하려고하면 아무런 효과가 없다.

내가

java -jar ModdingForScrubs.jar 

으로 명령 프롬프트에서 실행하면, 다음과 같은 출력을 얻을 : 그것은가 가리키는 특정 라인이

http://imgur.com/FOJKPma

그건 :

int numOfBackgrounds = new File("resources/background").listFiles().length; 

Null 포인터 예외가 발생하고 있습니다. 내가 이클립스에서 내 프로젝트를 실행할 때, 괜찮아.

jar 파일로 내보낼 때 파일을 찾을 수 없다는 사실 때문에 NPE가 발생합니다. 어떤 도움을 주시면 감사하겠습니다

http://imgur.com/034pBW8

:

여기 내 프로젝트 작업 영역이다.

+1

'새 파일 ("resources/background")가 예외의 원인 일 가능성이 큽니다. 폴더를 찾을 수 없습니다. 좋아하는 zip 도구를 사용하여 jar 파일을 열고이를 확인할 수 있습니다. 부가 메모로, 외부 스크린 샷이 아닌 순수한 텍스트로 직접 스택 추적을 게시하십시오. – Magnilex

+0

이클립스의 옵션 인'File> Export> Rannable Jar File'을 사용할 수있다. – Visruth

답변

0

리소스/배경 폴더를 찾을 수 없습니다. 리소스 폴더가 src 폴더 밖에 있기 때문에 Jar 파일을 패키징 할 때 리소스 폴더가 없습니다. Jar 파일을 열어 볼 수 있습니다.

리소스 폴더를 src 폴더에 옮긴 다음 액세스해야합니다. 이제는 Jar 파일과 함께 내 보내야합니다.

1

주의 사항.

  1. 당신이해야 File를 사용하는 경우, 하드 코딩 값을 사용하지. 응용 프로그램이 "jarred"되면 파일 시스템 위치은 더 이상 IDE에서 실행할 때와 동일하지 않습니다.

  2. jar 리소스를 읽으려면 getClass().getResource("...") 또는 그 변형 중 하나를 사용하여 리소스를 읽어야합니다.

또한 그것은 "리소스"는 src과 같은 수준에 있는지 (경로로는 "자원/배경"을 사용하는)처럼 보이는, 그리고 하지 이벤트가 빌드에 포함되지이다 항아리의 경로입니다. 항아리를 추출하면 파일이 없을 거라 확신합니다.

대신 "리소스"를 "src"안에 넣어야합니다. 자동으로 빌드 경로에 저장됩니다. 그 위치에 그대로두고 빌드를 추가하도록 구성 할 수 있지만 더 긴 설명이 필요합니다. 그래서 그냥 "src"에 넣으십시오.그래서 당신은 여전히 ​​문제가 하드 코드 상대 경로를 사용하여 파일 시스템에 사용하여 파일을 검색합니다 경로 File을 읽을 수 있도록 노력하고있다

ProjectRoot 
     src 
      resources 
        beackground 

같은 파일 구조를 가질 것이다. 그것은 작동하지 않습니다. 내가 말했듯이 URL에서 읽어야합니다. 그래서 당신은 다음과 같이 할 수 있습니다 :

URL url = TestFiles.class.getResource("/resources/background"); 
URI uri = url.toURI(); 
File file = new File(uri); 
File[] files = file.listFiles(); 
for (File f : files) { 
    System.out.println(f.getAbsolutePath()); 
} 

이것은 작동합니다. 그래서 당신이 빌드 한 후 확인, 파일이 실제로 항아리에 있는지, 다음 원하는 디렉토리의 URL을 얻을, 당신은 더 많은 자원을 얻는 방법에 대한 Class API를 참조 URI

  • 에서 File을 만들 수 있습니다 , 그리고 몇 가지 설명.
+0

도움을 주셔서 감사합니다. getResource()에 대한 모든 참조를 전환하지만 Eclipse에서 훌륭하게 작동하지만 추출한 이유가 URL이 null이라는 것을 알려줍니다. 폴더를 가져 오는 것을 좋아하지 않습니까? – user2683809

+0

더 이상 정보가 없으면 알 수 없습니다. 내 제안, 그냥 새 프로젝트를 만듭니다. resources/background 패키지를 src에 추가하십시오. 거기에 파일을 추가하십시오. 'main'과 단지 위의 코드로 하나의 간단한 클래스를 만드십시오. 실행 가능한 jar를 만든 다음 실행하십시오. 그것은 작동해야합니다. 방금 시험 했어. 작동하는 경우 실제 응용 프로그램에서 다르게 수행중인 작업을 확인하려면 디버깅을해야합니다. –

+0

아이디어를 얻으려면 [this post] (http://stackoverflow.com/a/25636097/2587435)를보십시오. –

관련 문제