vlcj läuft nicht exportiert, aber in Eclipse

Fohnbit

Top Contributor
Hallo,

ich nutze das vlcj Plugin zum abspielen von Videostreams.
In Eclipse funktioniert alles, aber sobald ich es exportiere, erhalte ich:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Unable to load library 'libvlc': JNA native support (win32-x86/libvlc.dll) not found in resource path (X:\software\dlc\Player\Player.jar)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:220)
        at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:322)
        at com.sun.jna.Library$Handler.<init>(Library.java:142)
        at com.sun.jna.Native.loadLibrary(Native.java:387)
        at com.sun.jna.Native.loadLibrary(Native.java:366)
        at player.Player$28.run(Player.java:1471)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Ich habe schon so ziemlich alles versucht:
Java:
 NativeLibrary.addSearchPath(
                                RuntimeUtil.getLibVlcLibraryName(), "X:/software/dlc/Player/");
                        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
                        LibXUtil.initialise();
oder
Java:
boolean found = new NativeDiscovery().discover();
                    System.out.println(found);
                    System.out.println(LibVlc.INSTANCE.libvlc_get_version());
oder
Java:
NativeLibrary.addSearchPath("libvlc", "X:/software/dlc/Player");
oder
Java:
String path = System.getProperty("user.dir");
            System.setProperty("jna.library.path", path);

In Eclipse habe ich also keine Probleme, nur wenn ich das Projekt als Lauffähiges JAR exportiere.
Die 2 DLL:
libvlc.dll
libvlccore.dll
sind im root des .jar Files.

Weiß jemand Bescheid wie ich das Projekt einstellen muss, damit der Export funktioniert?

Danke!
 
Ich habe nun rausgefunden, das ich in Eclipse mit 64bit arbeite und lokal mit 32bit:
Java:
System.out.println(System.getProperty("sun.arch.data.model"));

Ich habe mir hier dir 32bit VLC version heruntergeladen und die DLL eingebaut ... ist ihm egal 🙂
Starte ich das jar mit der 64bit Java läuft es.
Starte ich das jar mit der 32bit Java erhalte ich den Fehler. Scheinbar nimmt er mir immer die 64bit DLL vom installierten VLC?

Danke!
 
Zuletzt bearbeitet:
OK, konnte es nun doch lösen ... ich frage im Code ab, ob 32 oder 64bit ist und setze den Pfad entsprechend.
Man muss auch das Plugin Verzeichnis mit angeben.

Java:
        String version = System.getProperty("sun.arch.data.model");
        String vlcLibs = "";

        if ("32".equals(version)) {
            vlcLibs = "X:/software/dlc/Player/lib32/";
        } else {
            vlcLibs = "X:/software/dlc/Player/lib64/";
        }
        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), vlcLibs);
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

Im Ordner lib32 und lib64 jeweils die passenden libvlc.dll nud libvlccore.dll und das plugin Verzeichnis.
Dann klappt es 🙂
 

Zurück
Oben