現在、JavaFXメディアプレーヤーを動作させようとしていますが、アプリケーションをパックするときにメディアファイルを見つけると奇妙な動作をします。Eclipseで実行すると問題なく動作しますが、Mavenを1つの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
エラーの理由は、システムが指定されたファイルを見つけることができないことを示しています。面白いことに、実際にはone-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());
}
}