线程" main"中的例外情况java.lang.UnsatisfiedLinkError:java.library.path中没有indri_jni

时间:2014-08-05 18:39:22

标签: java

我正在研究狐猴工具,我遇到了一些问题。

当我执行代码时,java抱怨

Exception in thread "main" java.lang.UnsatisfiedLinkError: no indri_jni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at lemurproject.indri.indriJNI.<clinit>(indriJNI.java:109)
at lemurproject.indri.IndexEnvironment.<init>(IndexEnvironment.java:39)
at indritest.main(indritest.java:9)

这是我的代码

    import lemurproject.indri.*;
public class indritest
{
    public static void main ( String[] args ) 
    {
        try {

            String [] stopwords = {"a", "an", "the", "of"};
            IndexEnvironment env = new IndexEnvironment();
            env.setStoreDocs(true);
            env.setStopwords(stopwords);
            env.create("aaa"); 
            env.addFile("trekfile.txt", "booomer.txt");
            env.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我正在使用 jdk 1.8.0_11 x64bit, windows 7 ultimate x64bit, indri5.7 x64bit, eclipse juno x64bit。

............................................... .................................................. .................................................. .................. 编辑: -

我使用了 RALF WAGNER 给出的解决方案,现在我的控制台显示了这个Bug。 在我的控制台中打印System.getProperty(“java.library.path”)后,我得到了这个输出。 indri_jni.dll已存在于system32文件夹中。

我的代码。

 import lemurproject.indri.*;
public class indritest
{
    public static void main ( String[] args ) 
    {
        try {
            System.out.println(System.getProperty("java.library.path"));
            //System.loadLibrary("indri_jni");
            String [] stopwords = {"a", "an", "the", "of"};
            IndexEnvironment env = new IndexEnvironment();
            env.setStoreDocs(true);
            env.setStopwords(stopwords);
            env.create("aaa"); 
            env.addFile("trekfile.txt", "booomer.txt");
            env.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我的控制台外出。

  C:\Program Files\Java\jdk1.8.0_11\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\DMIX;C:\Program Files\Indri\Indri 5.7\bin;C:\Program Files\Java\jdk1.8.0_11\bin;.
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files\Indri\Indri 5.7\bin\indri_jni.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1929)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1847)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1119)
    at lemurproject.indri.indriJNI.<clinit>(indriJNI.java:109)
    at lemurproject.indri.IndexEnvironment.<init>(IndexEnvironment.java:39)
    at indritest.main(indritest.java:10)

1 个答案:

答案 0 :(得分:1)

除了项目中的Java类之外,您还使用了本机库,即不是用Java编写的库。 您需要将本机库添加到类路径中,并且可能需要在使用IndexEnvironment之类的任何类之前加载库,方法是调用

System.loadLibrary("<NAME OF THE LIBRARY>");

从堆栈跟踪中我猜测该库被称为&#34; indri_jni&#34;,所以我认为在Windows上你应该添加&#34; indri_jni.dll&#34;到你的Windows路径。这通常包括应用程序的工作目录,因此您可能必须将库放在那里或将找到库的目录添加到路径环境变量中。