从可执行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());
&#34; bounce.wav&#34;位于&#34;资源&#34;源文件夹@&#34;声音&#34;子目录。
在eclipse中运行应用程序不会引发任何异常@此点+在需要时播放AudioClip。
帮助! :(
答案 0 :(得分:0)
以下是抛出异常的代码:
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被激活?
如果你打开你的清单文件,你会发现一些eclipse添加的条目,如:
...
Rsrc-Class-Path: ./
Rsrc-Main-Class: net.xxx.main.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
这里是rsrc
的来源。
rsrc
开始条目并将主类更改为您的班级;