这不是重复,因为无法使用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和可执行文件
答案 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