可执行的jar audioclips



从可执行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:)

相关内容

  • 没有找到相关文章

最新更新