java - MediaException:从导出的 JAR 文件运行项目时 MEDIA_UNAVAILABLE
问题描述
这不是重复的,因为无法使用 getResourceAsStream() 初始化 Media 对象。来自文档:“仅支持 HTTP、FILE 和 JAR URI。”
我的 JavaFX 项目在我从 Eclipse 运行时运行良好,但在我运行导出的可执行 JAR 时中断。我已经尝试过每种类型的库处理,但都没有奏效。我正在使用 JavaFX 2.2 和 2018 年 3 月的 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 和可执行文件中中断
解决方案
该错误非常简单,它表示MEDIA_UNAVAILABLE
您的项目无法从给定路径中找到资源。可能是相对路径的原因,需要提供绝对路径才能从系统中查找资源。
你可以试试这样的
Media media = new Media(getHostServices().getDocumentBase() + "/com/projectName/resources/hello.mp3");
MediaPlayer player = new MediaPlayer(media);
编辑
从 hostServices.getCodeBase() javadoc:
如果应用程序未打包在 jar 文件中,则此方法返回空字符串。
并确保你有适当的imports
和扩展你的应用程序的Application
类
import javafx.application.Application;
import javafx.application.HostServices;
public class App extends Application {
}
推荐阅读
- python - 熊猫系列滚弦
- jenkins - Webhooks 如何让 BRANCH_NAME 由 Jenkins 上传
- scala - 不能在 intellij 中包含 org.apache.spark
- core-graphics - “将图形上下文保持在任何状态”的含义
- r - 匹配 gsub 模式中的下一个符号
- c# - C# 十六进制到字节数组循环
- tcl - 配置:错误:在 /home/dave/src/tcl-builds/raw/tcl8.4.1 中找不到私有头文件 tclInt.h
- android-graphview - 找不到 LineGraphView、GraphViewSeries、GraphViewData
- r - 如何根据 R 中的集群分离数据
- facebook - Facebook 应用帖子不会向用户显示