我正在尝试让JavaFX媒体播放器工作,并且在打包应用程序时找到我的媒体文件有一些奇怪的行为。它在eclipse中运行时效果很好但是只要我用maven打包它作为一个jar就不能再找到媒体文件了,我得到以下错误:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.simontuffs.onejar.Boot.run(Boot.java:340)
at com.simontuffs.onejar.Boot.main(Boot.java:166)
Caused by: MediaException: MEDIA_UNAVAILABLE : \resources-0.0.1-SNAPSHOT.one-jar.jar
(Das System kann die angegebene Datei nicht finden)
at javafx.scene.media.AudioClip.<init>(AudioClip.java:65)
at com.example.test.MyResourceTest.getResource(MyResourceTest.java:11)
at com.example.test.MyResourceTest.main(MyResourceTest.java:18)
... 6 more
错误原因表明系统找不到给定的文件。有趣的是,它实际上是在一个jar文件中可用,因此它应该工作。这对我来说是一种显示阻碍,我无法从Oracle论坛得到一个回应。
我上传了我的简单eclipse项目供任何人尝试: http://www.fileswap.com/dl/itytDY7mcY/
否则这是代码:
public class MyResourceTest {
public String getResource() {
final URL sound = getClass().getResource("/com/example/data/sound.mp3");
AudioClip soundEffect = new AudioClip(sound.toString());
return sound.toString();
}
public static void main(String[] args) {
System.out.println(new MyResourceTest().getResource());
}
}
答案 0 :(得分:1)
其实我刚刚发现了一个非常好的方法来解决这个问题 使用方法:
getHostServices().getDocumentBase()
在你的应用程序类中获取文档库, 然后使用像
这样的东西 Media media = new Media(documentBase + "/resources/" + name + ".mp3");
player = new MediaPlayer(media);
或在你的情况下:
Media media = new Media(documentBase + "/com/example/data/sound.mp3");
player = new MediaPlayer(media);
(这仅在您使用javafx应用程序时有效)