Исполняемая банка + аудиоклипы
Я получаю это исключение при запуске приложения из исполняемого файла jar:
java.lang.UnsupportedOperationException: Unsupported protocol "rsrc"
at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:233)
at com.sun.media.jfxmediaimpl.NativeMediaAudioClip.<init>(NativeMediaAudioClip.java:53)
at com.sun.media.jfxmediaimpl.NativeMediaAudioClip.load(NativeMediaAudioClip.java:63)
at com.sun.media.jfxmediaimpl.AudioClipProvider.load(AudioClipProvider.java:66)
at com.sun.media.jfxmedia.AudioClip.load(AudioClip.java:135)
at javafx.scene.media.AudioClip.<init>(AudioClip.java:83)
at com.aqua.snakesandladders.view.gamepieces.Token.<init>(Token.java:70)"
вот Token.java:70, который является причиной этого:
AudioClip bounceSound = new AudioClip(getClass().getResource("/sounds/bounce.wav").toExternalForm());
"bounce.wav" находится в папке "resources" исходной папки @ "звуки".
При запуске приложения в eclipse не возникает исключений @ эта точка + воспроизводит аудиоклип при необходимости.
Помогите!:(
1 ответ
Источник
Ниже приведен код, который выдает исключение:
this.scheme = this.scheme.toLowerCase();
if (this.scheme.equals("jar")) {
URI subURI = new URI(this.uriString.substring(4));
this.protocol = subURI.getScheme();
if (this.protocol == null) {
throw new IllegalArgumentException("uri.getScheme() == null!");
}
this.protocol = this.protocol.toLowerCase();
} else {
this.protocol = this.scheme;
}
if (!this.protocol.equals("file") && !this.protocol.equals("http")) {
throw new UnsupportedOperationException("Unsupported protocol \"" + this.protocol + "\"");
} else {
if (this.protocol.equals("http")) {
this.canBlock = true;
}
this.uri = uri;
}
Если вы напечатаете свой URI здесь, вы можете увидеть что-то вроде:
rsrc:foo.bar.Main
Какой неверный URI, как сказал вам javafx.
манифест
Так почему же ты Ури?
Если вы откроете свой файл Manifest, вы найдете несколько записей, которые затмение добавлены, например:
...
Rsrc-Class-Path: ./
Rsrc-Main-Class: net.xxx.main.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
и вот где rsrc
происходит от.
Совет
- Обновите файл манифеста так, чтобы он соответствовал исходному манифесту, т.е. удалите
rsrc
начался вход и измените основной класс на свой класс; - Не используйте eclipse для упаковки вашей банки, используя такие инструменты, как maven, gradle
- Используйте Intellij:)