Обработка 2.0 Фильм не может открыть файл фильма при запуске из банки

1

Я пытаюсь запустить фильм, используя класс обработки 2.0.

Если я запустил свою программу из своего редактора кода (Eclipse в моем случае), все будет хорошо работать, и код работает безупречно: он находит и запускает фильм.

Однако, когда я экспортирую свою программу в банку и запускаю ее с моего терминала, она находит файл, но при сбоях при попытке его открыть.

В настоящее время я использую этот код для поиска строки пути к фильму.

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() удаляет "Файл:" в файле:/Path/To/My/File, так как это ненужный побочный эффект от использования вышеуказанного способа.

Еще немного в моем коде. Я уже добавил дополнительную проверку, чтобы увидеть, нет ли чего-то неправильного пути, который возвращает классLoader, я делаю это со следующими строками.

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

команда в моей командеLine возвращает тот же файл/путь к файлу, чтобы путь был правильным, и все здесь хорошо.

Но теперь, когда я пытаюсь загрузить фильм через Process 'Movie class со следующим кодом:

currentMovie = new Movie(parent, moviePath);

Он выдает исключение java.lang.StringIndexOutOfBoundsException и сбой. Я понятия не имею, что я делаю неправильно, так как этот код работает безупречно из моего редактора кода. + Я использую тот же способ поиска файлов для своих аудиофайлов, и те, которые запускаются без изменений, даже из исполняемого файла.jar.

Насколько я могу судить по чтению справочной библиотеки класса Movie, ему просто нужно место, чтобы отобразить его и путь к файлу, который я даю.

Я надеялся, что какой-нибудь ветеран сможет увидеть, что я делаю неправильно, и помог мне решить эту проблему, с которой я боролся в течение нескольких дней. Это, наверное, что-то глупое, что я сейчас просто смотрю.

Теги:
executable-jar
processing
movie

1 ответ

0

Я не знаю точно, что случилось, но вот пару вещей, которые я бы сделал:

проверьте разрешения на видеофайл, убедитесь, что программа будет иметь к нему доступ.

Я читал, что лучше использовать

Thread.currentThread().getContextClassLoader()

чем класс classloader, но я не знаю, поможет ли это.

Библиотеки обработки имеют открытый исходный код. Может быть, посмотрите, где именно вызывается это исключение, и посмотрите на источник. Это может помочь вам определить проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню