无法修复vlcj加载库'libvlc'

时间:2014-01-11 19:17:57

标签: java vlcj

我正在使用netbeans来使用vlcj jar我的jdk是 jdk-7u45-windows-x64 而我的 vlc是64b 我通过去图书馆然后右边安装了库单击库文件,然后添加jar /文件夹,我添加了文件,我从这里下载file link文件名 vlcj-3.0.0-dist.zip 我解压缩然后添加它通过选择它们所有的测试代码是这个

    package translater;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import com.sun.jna.Native;


/**
 *
 * @author isslam
 */
public class Translater {


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        GuiClass is = new GuiClass("AnimeFactor");
        is.setVisible(true);

        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);


    }

}

错误信息是这个

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libvlc': JNA native support (win32-amd64/libvlc.dll) not found in resource path (C:\Users\isslam\Desktop\vlcj-2.4.1-dist\vlcj-2.4.1\jna-3.5.2.jar;C:\Users\isslam\Desktop\vlcj-2.4.1-dist\vlcj-2.4.1\platform-3.5.2.jar;C:\Users\isslam\Desktop\vlcj-2.4.1-dist\vlcj-2.4.1\vlcj-2.4.1.jar;C:\Users\isslam\Documents\NetBeansProjects\translater\build\classes)
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 translater.Translater.main(Translater.java:27)

2 个答案:

答案 0 :(得分:10)

vlcj依赖于JNA。

因此,您需要将JNAJNA Platform jar文件添加到项目中。如何执行此操作取决于您自己的项目和您正在使用的IDE。最基本的方法是从链接[1][2]下载jar文件,并将它们复制到包含vlcj jar文件的同一目录。

在vlcj jar文件中声明的清单类路径引用这些JNA jar - 这意味着您只需要确保将jar文件复制到项目中的正确位置,您不必显式添加它们到您的项目类路径。

我认为如果你使用Maven会更简单,但无论如何......

正确安装库之后,下一个问题是让JVM加载本机库。

您可以出于多种原因获得UnsatisfiedLinkError,最常见的是:

  1. 无法找到您尝试加载的共享对象(DLL);
  2. 您正在尝试混合CPU架构,即您的JVM是64位,但您的本机库是32位(反之亦然)。这可以从不工作。
  3. 使用JNA加载本机库时,有多种方法可以设置搜索路径......

    这在[3]中有解释,但总结一下,最简单的方法是在应用程序中添加这样的代码:

    NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "the-directory");
    

    此语句告诉JNA查找特定目录以查找LibVLC共享对象(Windows上的DLL)。

    替换文字字符串&#34; -directory&#34;使用磁盘上包含libvlc.dll和libvlccore.dll文件的目录的完整路径(如果您在Linux上,则使用等效的.so文件)。

    没有64位或32位版本的vlcj - 它只是与平台无关的Java。

    [1]:http://search.maven.org/#artifactdetails%7Cnet.java.dev.jna%7Cjna%7C4.0.0%7Cjar

    [2]:http://search.maven.org/#artifactdetails%7Cnet.java.dev.jna%7Cjna-platform%7C4.0.0%7Cjar

    [3]:http://www.capricasoftware.co.uk/projects/vlcj/tutorial1.html

    如果您使用的是vlcj 3.0.0或更高版本,则上述依赖项(以及指向工件的链接)是正确的。如果您使用的是早期版本的vlcj,例如2.4.1,那么您需要使用JNA和JNA Platform版本3.5.2而不是4.0.0。

答案 1 :(得分:0)

是的,但我的问题是jvm,我认为32b所以我通过下载来改变它在这里形成java jvm这个页面有32和64类型