MediaException:从导出的JAR文件运行项目时的MEDIA_UNAVAILABLE

时间:2018-05-20 22:06:25

标签: java javafx executable-jar

这不是重复,因为无法使用getResourceAsStream()初始化Media对象。来自文档:“仅支持HTTP,FILE和JAR URI。”

当我从Eclipse运行它时,我的JavaFX项目工作正常,但是当我运行我导出的可执行JAR时,它会中断。我已经尝试了每种类型的库处理,但它都不起作用。我在2018年3月使用JavaFX 2.2和Eclipse Oxygen。

public static Media gameMusic;
public static MediaPlayer gameMusicPlayer;
public static MediaView gameMusicMediaView;

// adds music, once for each audio file to be played
gameMusic = new Media(new File("resources/data/music/Kevin_MacLeod_-_Ouroboros_-_Full_Mix.wav").toURI().toString());
bulletSound = new AudioClip(new File("resources/data/music/Photon gun shot.wav").toURI().toString());
explosionSound = new AudioClip(new File("resources/data/music/Explosion+3.wav").toURI().toString());

目录结构:

+src
  -source files
+resources
  +data
    +music
      -music files
    +fxml
      -fxml files
    +other folders

错误输出:

MediaException: MEDIA_UNAVAILABLE : /Users/username/Desktop/resources/data/music/Kevin_MacLeod_-_Ouroboros_-_Full_Mix.wav (No such file or directory)
at javafx.scene.media.Media.<init>(Media.java:407)
at application.Main.start(Main.java:77)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

注意:当我修复文件路径的代码以包含可执行文件的名称时,它会破坏Eclipse和可执行文件

1 个答案:

答案 0 :(得分:-1)

错误非常简单,它表示FallbackResource表示您的项目无法从给定路径中找到资源。这可能是由于相对路径,您需要提供一个绝对路径来从系统中查找资源。

你可以试试这样的事情

MEDIA_UNAVAILABLE

修改

来自hostServices.getCodeBase()javadoc

  

如果应用程序未打包在jar文件中,则此方法返回空字符串。

并确保您拥有正确的Media media = new Media(getHostServices().getDocumentBase() + "/com/projectName/resources/hello.mp3"); MediaPlayer player = new MediaPlayer(media); 并使用imports

扩展您的应用
Application