2013-01-20 2 views
0

J'essaie actuellement de faire fonctionner le lecteur multimédia JavaFX et d'avoir un comportement étrange avec la localisation de mes fichiers multimédias lors de l'emballage de mon application. Il fonctionne très bien quand il en cours d'exécution dans l'éclipse, mais dès que je pack avec Maven comme un pot le fichier multimédia ne peut plus être trouvé et je reçois l'erreur suivante:JavaFX MEDIA_UNAVAILABLE dans le fichier 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 

La raison erreur indique que le système ne peut pas trouver le fichier donné. Chose amusante, c'est qu'il est réellement disponible dans le fichier d'un pot et donc il devrait fonctionner. C'est un peu un bouchon de spectacle pour moi et je ne pouvais pas obtenir une seule réponse du forum Oracle.

J'uploadés mon projet simple d'éclipse pour quiconque d'essayer: http://www.fileswap.com/dl/itytDY7mcY/

Sinon, cela est le code:

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()); 
    } 
} 

Répondre

0

En fait, je viens de trouver un moyen très agréable de résoudre ce utilisation:

getHostServices().getDocumentBase() 

dans votre classe d'application pour obtenir la base de documents, puis utilisez someth ing comme

Media media = new Media(documentBase + "/resources/" + name + ".mp3"); 
player = new MediaPlayer(media); 

ou dans votre cas:

Media media = new Media(documentBase + "/com/example/data/sound.mp3"); 
player = new MediaPlayer(media); 

(cela ne fonctionne que si vous utilisez une application JavaFX)

Questions connexes