La lecture de vidéos fonctionne bien dans Eclipse mais lors de l'exportation du projet java en tant que fichier JAR exécutable cela ne fonctionne plus


J'ai écrit du code qui lit des vidéos .mp4 dans un JFrame. J'utilise vlcj - 3.0.1 et à l'intérieur d'eclipse tout fonctionne parfaitement. Mais lorsque j'exporte le projet Java en tant que fichier JAR exécutable et que je place le dossier res séparément dans le même répertoire que le fichier JAR, les vidéos ne sont plus lues. Je dois faire quelque chose de mal avec le chemin de fichiers, mais je ne sais pas ce que je fais de mal.

J'ai déjà regardé Google et trouvé un fil avec l'exact même problème:

VLCJ-la lecture d'une vidéo à partir du dossier " res " fonctionne très bien dans eclipse, mais pas à partir du fichier JAR exécutable

J'ai essayé d'utiliser les recommandations de caprica mais je n'ai eu aucun succès.

    // Attributes
Canvas c = new Canvas();
MediaPlayerFactory mpf = new MediaPlayerFactory();
EmbeddedMediaPlayer emp = mpf.newEmbeddedMediaPlayer();
String mrl = new File("res/video/beach.mp4").getAbsolutePath();

// For Seeing the FilePath, so i can place the res folder correctly after 
//creating the runnable jar file
System.out.println(mrl);



// Giving the Libary for VLCJ Plugin
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "lib");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

// Setting up the player, didnt including the jframe here, since its working
emp.setVideoSurface(mpf.newVideoSurface(c));
emp.setEnableMouseInputHandling(false);
emp.setEnableKeyInputHandling(false);
emp.prepareMedia(mrl);
emp.setRepeat(true);
emp.play();

Je m'attendais à ce qu'un JFrame s'ouvre et lit la vidéo en boucle.Le JFrame apparaît mais j'ai juste un écran noir...(j'ai défini ma couleur d'arrière-plan jframe sur noir).

Author: Johann Doe, 2019-07-05

1 answers

Merci d'avoir répondu. c'est exactement le problème.

Comme vous l'avez déjà mentionné, j'ai extrait les ressources dans un dossier séparé et laissé le fichier JAR exécutable atteindre le média "extérieur". cela a fonctionné par une solution caprica mentionnée dans l'autre thread:

String mrl = new File("res/media/video.mp4").getAbsolutePath();

Maintenant les choses deviennent un peu différent. puisque je voulais charger les ressources à partir des emplacements où le fichier jar est enregistré (de sorte que le fichier jar s'adapte dynamiquement à l'emplacement de lui-même et à l'ajout ressources.

J'ai ajouté les lignes suivantes:

String jarDir = new File(ClassLoader.getSystemClassLoader().getResource(".").getPath()).getAbsolutePath();
String dir = jarDir;
String path = "res/video/beach.mp4"

mpf = new MediaPlayerFactory();
emp = mpf.newEmbeddedMediaPlayer();
emp.prepareMedia(dir + path);
emp.setRepeat(true);
emp.play();
 1
Author: Johann Doe, 2019-07-07 16:02:15