从可执行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"位于"资源"源文件夹 @" Sounds"子文件夹中。
在Eclipse中运行该应用程序不例外 @此点 在需要时播放AudioClip。
帮助!:(
源
以下是引发异常的代码:
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
正如Javafx告诉您的那样,这是无效的URI。
清单
那么,为什么您会被uri?
如果您打开清单文件,您会发现一些添加的日食的条目,例如:
...
Rsrc-Class-Path: ./
Rsrc-Main-Class: net.xxx.main.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
这是rsrc
来自的地方。
建议
- 更新您的清单文件为原始清单,即删除
rsrc
开始输入并将主类更改为您的类; - 不要使用Eclipse包装您的罐子,使用Maven,Gradle等工具
- 使用Intellij:)