java.lang.UnsatisfiedLinkError:访问被拒绝。使用JNI

时间:2014-06-13 13:27:20

标签: tomcat permissions java-native-interface windows-server-2008 tesseract

我努力尝试通过Tess4J项目将工作作为使用Tesseract的Java servlet。初始化库主类(TessAPI)时,servlet会停止,并出现以下异常:

java.lang.UnsatisfiedLinkError: Access is denied.

    com.sun.jna.Native.open(Native Method)
    com.sun.jna.Native.open(Native.java:1759)
    com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
    com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
    com.sun.jna.Library$Handler.<init>(Library.java:147)
    com.sun.jna.Native.loadLibrary(Native.java:412)
    com.sun.jna.Native.loadLibrary(Native.java:391)
    net.sourceforge.tess4j.TessAPI.<clinit>(Unknown Source)
    it.sampleProj.DocumentVisualizer.startOCRConfidence(DocumentVisualizer.java:301)
    it.sampleProj.DocumentVisualizer.startRecognition(DocumentVisualizer.java:220)
    it.sampleProj.DocumentIdentifier.recognizeDocument(DocumentIdentifier.java:147)
    it.sampleProj.DocumentIdentifier.startDocumentSearch(DocumentIdentifier.java:89)
    it.sampleProj.DocumentRecognizerServlet.doPost(DocumentRecognizerServlet.java:106)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723)

我使用的是Apache Tomcat8 64位,在Windows 2008 Server R2 64位上使用64位JDK 7.0.60 64位和Tesseract.exe以及64位相关的.dll文件。 此错误听起来像是权限问题,我不确定Tomcat运行的用户帐户是什么。无论如何,我已经授予tomcat的lib文件夹(libtesseract302.dll和liblept168.dll)中包含的两个.ddl文件的所有权限

有一种方法可以获取有关Access拒绝问题感兴趣的资源的更多信息吗?

3 个答案:

答案 0 :(得分:1)

最后问题是由32-64位不匹配引起的。

正如我所说,Tomcat,JVM,Tesseract和OS都是他们的64位版本。但战争是用32位构建设置生成的。 重新创建64位的.war为我解决了这个问题。

答案 1 :(得分:0)

来自Javadoc:

Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native.

这是与JNI相关的错误。 loadLibrary正在尝试加载本机库,并且在java.library.path定义的路径上找不到它。启动JVM时,应将此路径定义为系统属性。 e.g。

-Djava.library.path=<your native library>

答案 2 :(得分:0)

以系统管理员身份运行它,它肯定会起作用。