2017-04-15 1 views
0

이 주제가 많은 시간을 보냈으며 soluution 이후에도 몇 시간 동안 stackoverflow를보고 있었지만 여전히 작동하지는 않습니다. Eclipse에서 runnable jar 파일을 내보낼 때 jar 파일 작업을 수행 할 수 없습니다. 이 프로그램은 실행할 때 이클립스에서 완벽하게 작동하지만 jar 파일을 열려고하면 화면이 검은 색으로 변하고 아무 것도 일어나지 않습니다. 나는 java -jar nameoffile.jar 명령으로 열려고 시도하고 거기에 filenotfoundexception이있다. 이것은 cmd를 실행하려고 할 때 cmd와 유사합니다.Jar 파일이 작동하지 않음 (cmd로 실행 중일 때 filenotfoundexception)

아무에게도 제안 사항이 있습니까? 감사

enter image description here

+0

항아리를 만들기 위해 무엇을 사용하고 있습니까? – ProgrammerBoy

+0

일식에서 나는 export -> runnable jar 파일을 사용한다 –

+0

"패키지가 필요한 라이브러리를 생성 된 jar에 넣었다"와 "생성 된 jar 파일에 필요한 라이브러리를 추출하려고 시도했다" –

답변

1

문제는 당신이 당신의 자원을 얻는 방법이다.

wav 파일을 src 폴더에 넣으십시오. FileInputStream을 사용하여 wav 파일을 가져 오면 작동하지 않습니다. 당신은 항아리에 파일을 넣으면

당신이 그들을 통해 서 접근해야이 같은

getClass().getResourceAsStream(filepath)

뭔가. 단지 예를의

public class LoadFile { 
    public static void main(String[] args) throws Exception { 
     InputStream stream = 
      LoadFile.class.getResourceAsStream("/songwavs/s1_..._.wav"); 
      AudioSystem.getAudioFileFormat(stream); 
      AudioSystem.getAudioFileFormat(url); 
    } 
} 

는 점은 단지 내부의 자원되고, 클래스 로더가 그것을 얻을 수있는 도구입니다 것입니다.

그래서, 비 정적 메서드 내에서 당신은 사용할 수 있습니다

public void myMethod() throws Exception{ 
    InputStream stream = getClass().getResourceAsStream("/songwavs/s1_..._.wav"); 
    AudioSystem.getAudioFileFormat(stream); 
} 

을 어떤 상황에서이 같은 스레드 클래스 로더를 사용해야합니다

public void myMethod2() throws Exception{ 
    InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/songwavs/s1_..._.wav"); 
    AudioSystem.getAudioFileFormat(stream); 
} 

그럼 당신은 당신의 파일을 읽을 넣을 수 있습니다 둘 다 일식 또는 항아리에서 달릴 때.

응용 프로그램을 패키지화하고 배포하는 방법에 대해 더 많은 내용이 있지만 그저 시작일뿐입니다.

+0

좋습니다. 하지만 프로그램을 변경하는 대신 내보내기 jar 파일을 선택하면 "필요한 라이브러리를 생성 된 jar 파일 옆의 하위 폴더에 복사"할 수 있습니다. –

+0

아니요. FileInputStream은 파일을 읽지 않습니다. jar 파일의 항목은 파일이 아니지만, 응용 프로그램과 함께 src 디렉토리를 배포하고 응용 프로그램을 실행할 때 작업 디렉토리에 배치해야합니다. – minus

+0

확인. 도와 주셔서 감사합니다! 오늘 밤 LoadFile.class를 사용하여 프로그램을 변경하십시오.getResourceAsStream ("/ songwavs/s1 _..._. wav"); 작동하는지 확인하십시오. 나는 오늘 밤에 나중에 돌아온다 –