我尝试使用Processing 2.0 Movie类运行电影。
如果我从我的代码编辑器(在我的情况下是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;
}
正如您所看到的,我正在使用classLoader为我找到该文件,因为在将其导出到.jar文件之后路径不同并且不希望自己一直更改路径。 .getPath()删除'文件:'在文件: /路径/到/我/文件中,因为这是使用上述方式所不必要的副作用。
在我的代码中,我已经添加了额外的检查以查看classLoader返回的路径是否有任何问题,我使用以下行进行此操作。
File temp = new File(moviePath);
System.out.println("If I have something after this, the file exists: '" + temp + "'");
它始终返回正确的路径,无论它是从我的Eclipse(/Users/Path/To/My/Folder/2/java/Game/movies/introMovie.mp4)还是从可执行文件中运行。 jar文件(introMovie.mp4)。
起初我觉得奇怪的是,在.jar文件中,它直接给了我一个文件而没有通向它的路径,因为它确实在我的项目中有一些结构但是在使用
之后jar tf myProject.jar
在我的commandLine中的命令,它返回文件的相同文件/路径名,所以路径应该是正确的,并且一切都在这里。
但现在,当我尝试通过Processing'加载电影时具有以下代码的电影类:
currentMovie = new Movie(parent, moviePath);
抛出 java.lang.StringIndexOutOfBoundsException 异常并崩溃。我不知道我做错了什么,因为这段代码在我的代码编辑器中完美运行+我使用相同的方式为我的音频文件定位文件和那些运行aswel的文件,即使是从可执行文件.jar文件。
据我所知,在阅读Movie class reference library时,它只需要一个显示它的位置以及我所给予的文件路径。
我希望这里有一位老将能看出我做错了什么,并帮助我解决这个问题,我现在已经困难了好几天了。我现在只是俯视,这可能是愚蠢的事。
答案 0 :(得分:0)
我不知道到底出了什么问题,但我会做几件事:
检查视频文件的权限,确保程序可以访问它。
我已经读过使用
更好的主意Thread.currentThread().getContextClassLoader()
比班级的班级加载者,但我不知道这是否会有所帮助。
处理库是开源的。也许可以确切地看到抛出该异常的位置并查看源代码。它可能会帮助您查明问题。