“线程中的异常”;“主要”;java.lang.UnsatifiedLink错误:java.library.path中没有indri_jni
我正在使用狐猴工具,我遇到了一些问题 当我执行代码时,java会抱怨“线程中的异常”;“主要”;java.lang.UnsatifiedLink错误:java.library.path中没有indri_jni,java,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.la
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)
我正在使用
jdk 1.8.0_11 x64bit,
windows 7 ultimate x64位,
indri5.7 x64位,
eclipsejunox64bit
徖。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
编辑:-
我使用了拉尔夫·瓦格纳给出的解决方案,现在我的控制台显示了这个Bug。
在控制台中打印System.getProperty(“java.library.path”)之后,我得到了这个输出。system32文件夹中已存在indri_jni.dll
我的密码
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)
C:\ProgramFiles\Java\jdk1.8.0\u 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:\ProgramFiles\Indri\Indri 5.7\bin;C:\ProgramFiles\Java\jdk1.8.0\u 11\bin;。
线程“main”java.lang.UnsatifiedLink中出现异常错误:C:\Program Files\Indri\Indri 5.7\bin\Indri\u jni.dll:找不到依赖库
位于java.lang.ClassLoader$NativeLibrary.load(本机方法)
位于java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1929)
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1847)
位于java.lang.Runtime.loadLibrary0(Runtime.java:870)
位于java.lang.System.loadLibrary(System.java:1119)
位于lemurproject.indri.indriJNI.(indriJNI.java:109)
位于lemurproject.indri.IndexEnvironment.(IndexEnvironment.java:39)
在indritest.main(indritest.java:10)
除了项目中的Java类之外,您还使用本机库,即非Java编写的库。
您需要将本机库添加到类路径中,并且可能需要在使用任何类(如IndexEnvironment
)之前通过调用
System.loadLibrary("<NAME OF THE LIBRARY>");
System.loadLibrary(“”);
从堆栈跟踪中,我猜库名为“indri_jni”,因此我认为在Windows上,应该将“indri_jni.dll”添加到Windows路径中。这通常包括应用程序的工作目录,因此您可能必须将库放在其中,或将找到库的目录添加到path环境变量中。(1)将本机库放在类路径上没有帮助。在Windows上,本机库必须位于
路径上
。打印出System.getProperty(“java.library.path”)
以查看是否正确设置了路径。(2) 没有必要自己加载库-正如您从stacktrace中看到的那样,IndexEnvironment
类通过indriJNI
类加载库本身。Luke:(1)您是对的,我更改了描述。Luke:(2)再次正确,这实际上没有必要。但我更希望代码尽早失败,并在code.java-Djava.library.path=“”–jar中清楚地显示依赖关系。这可能会有所帮助。在indri_jni.dll
上运行dependency Walker,看看它需要哪些dll,而您没有。另请参见感谢frnds,我在dependency walker的帮助下清除了我的错误。。。卢克·伍德沃德和拉尔夫·旺格。
System.loadLibrary("<NAME OF THE LIBRARY>");