La riproduzione di video funziona bene in Eclipse ma quando si esporta il progetto java come file JAR eseguibile non funziona più


Ho scritto del codice che riproduce alcuni video .mp4 all'interno di un JFrame. Sto usando vlcj-3.0.1 e dentro eclipse tutto funziona perfettamente. Ma quando sto esportando il progetto Java come file JAR eseguibile e inserisco la cartella res separatamente nella stessa directory del file JAR, i video non vengono più riprodotti. Devo aver fatto qualcosa di sbagliato con il filepath, ma non capisco cosa sto facendo di sbagliato.

Ho già cercato Google e ho trovato un thread con l'esatto stesso problema:

VLCJ-la riproduzione di un video dalla cartella " res " funziona alla grande in eclipse, ma non dal file JAR eseguibile

Ho provato ad usare le raccomandazioni di caprica ma non ho avuto successo.

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

Mi aspettavo che un JFrame si aprisse e riproducesse il video su un loop.Il JFrame si apre ma ho solo uno schermo nero...(ho impostato il mio colore di sfondo jframe su nero).

Author: Johann Doe, 2019-07-05

1 answers

Grazie per aver risposto. questo era esattamente il problema.

Come hai già detto, ho estratto le risorse in una cartella separata e ho lasciato che il file JAR eseguibile raggiungesse il supporto "esterno". ha funzionato con una soluzione caprica menzionata nell'altro thread:

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

Ora le cose si fanno un po ' diverse. dal momento che volevo caricare le risorse dalle posizioni in cui viene salvato il file jar (quindi il file jar si adatta dinamicamente alla posizione di se stesso e all'aggiunta resources.

Ho aggiunto le seguenti righe:

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