java Processing 2.0电影从jar运行时无法打开电影文件
我正在尝试使用Processing 2.0电影类运行电影
如果我从我的代码编辑器(在我的例子中是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中的“File:”,因为使用上述方法会产生不必要的副作用
在我的代码中,我已经添加了一个额外的检查,以查看类加载器返回的路径是否没有问题,我使用下面的行来执行此操作
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
命令在我的命令行中,它为文件返回相同的文件/路径名,因此路径应该正确,并且在这里一切正常
但是现在,当我尝试通过使用以下代码处理“电影”类加载电影时:
currentMovie = new Movie(parent, moviePath);
它抛出一个java。lang.StringIndexOutOfBoundsException异常和崩溃。我不知道我做错了什么,因为这段代码在我的代码编辑器中完美地运行,而且我使用相同的方法查找音频文件和那些同样运行的文件,甚至是从可执行文件。jar文件
从阅读Movie class reference library可以看出,它只需要一个地方来显示它,以及我给出的文件路径
我希望这里的一些老兵能看到我做错了什么,帮助我解决这个我已经挣扎了几天的问题。这可能是我现在忽略的一些愚蠢的事情
# 1 楼答案
我不知道到底出了什么问题,但以下是我要做的几件事:
检查视频文件的权限,确保程序可以访问该文件
我已经读到使用它是一个更好的主意
比类的类加载器,但我不知道这是否有帮助
处理库是开源的。也许可以看到异常抛出的确切位置,并查看源代码。这可能有助于你找出问题所在