有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我不知道到底出了什么问题,但以下是我要做的几件事:

    检查视频文件的权限,确保程序可以访问该文件

    我已经读到使用它是一个更好的主意

    Thread.currentThread().getContextClassLoader()
    

    比类的类加载器,但我不知道这是否有帮助

    处理库是开源的。也许可以看到异常抛出的确切位置,并查看源代码。这可能有助于你找出问题所在