2014-04-21 6 views
1

Processing 2.0 Movie 클래스를 사용하여 동영상을 실행하려고합니다.처리 2.0 jar에서 실행할 때 동영상이 동영상 파일을 열 수 없음

코드 편집기 (제 경우에는 Eclipse)에서 프로그램을 실행하면 모든 것이 잘 작동하고 코드가 완벽하게 실행됩니다. 동영상을 찾아서 시작합니다.

그러나 내 프로그램을 jar로 내보내고 터미널에서 시작하면 파일을 찾지 만 열려고하면 충돌이 발생합니다.

현재이 코드를 사용하여 영화 경로 문자열을 찾습니다.

public String locateMovie(String moviePath) { 
    String movie = MoviePlayer.class.getClassLoader().getResource(moviePath).getPath(); 
    if (movie == null) { 
     System.out.println("FATAL ERROR --- Movie file not found: '" + moviePath + "'"); 
    } 
    return movie; 
} 

당신은 내가 .jar 파일로 내 보낸 모든 시간을 경로 나 자신을 변경하지 않으 후 경로가 다르기 때문에 내가 나를 위해 파일을 찾습니다 클래스 로더를 사용하고 볼 수 있듯이. .getPath()는 의 파일 :/Path/To/My/File에서 위의 방법을 사용하면 불필요한 부작용이되므로 '파일 :'을 삭제합니다.

내 코드에서 추가로 이미 classLoader가 반환하는 경로에 아무런 문제가 없는지 확인하기 위해 추가 검사를 추가했습니다. 다음 행을 사용하여이 작업을 수행합니다.

File temp = new File(moviePath); 
System.out.println("If I have something after this, the file exists: '" + temp + "'"); 

그것은 항상 내 이클립스 (/Users/Path/To/My/Folder/2/java/Game/movies/introMovie.mp4) 내에서 또는 실행 파일에서 실행중인 여부, 올바른 경로를 반환합니다. jar 파일 (introMovie.mp4).

는 처음에 나는 내 프로젝트의 일부 구조를 가지고 않기 때문에 .jar 파일에이 바로 그것으로 이어지는 길없는 나에게 파일을주고 있었다 이상한했지만

jar tf myProject.jar 
사용 후 생각

내 commandLine에서 명령은 파일에 대한 동일한 파일/경로 이름을 반환하므로 경로가 정확해야하며 모두 여전히 여기에 있습니다. 나는 다음과 같은 코드로 처리 '영화 클래스를 통해 영화를로드 할 때

그러나 지금 :

currentMovie = new Movie(parent, moviePath); 

는 그것은 java.lang.StringIndexOutOfBoundsException 예외와 충돌이 발생합니다. 나는이 코드가 내 코드 편집기 내에서 완벽하게 실행되기 때문에 내가 뭘 잘못하고 있는지 전혀 모른다. + 나는 오디오 파일과 실행 가능한 .jar 파일에서도 aswel을 실행하는 파일을 찾는 동일한 방법을 사용하고있다.

필자가 Movie class reference library을 읽는 것으로부터 알 수 있듯이, 파일을 표시 할 장소와 내가 제공하는 파일의 경로가 필요합니다.

나는 여기서 몇 몇 베테랑이 내가 잘못하고있는 것을보고 내가이 문제를 해결할 수 있기를 바랬다. 나는 지금 며칠 동안 고심하고있다. 아마 내가 지금 바라보고있는 바보 같은 짓 일 겁니다. 내가 할 것이 몇 가지의 여기 정확히 무엇을 잘못 알고 있지만하지 않는

답변

0

: 비디오 파일에

검사 권한을 프로그램이 액세스를 할 것이다 있는지 확인하십시오.

나는 클래스의 클래스 로더보다

Thread.currentThread().getContextClassLoader() 

를 사용하는 것이 더 나은 생각 읽었습니다,하지만 도움이 될 나도 몰라.

처리 라이브러리는 오픈 소스입니다. 어쩌면 예외가 던져지고있는 곳을 정확하게보고 소스를 살펴볼 수 있습니다. 문제를 정확히 파악하는 데 도움이 될 수 있습니다.