我努力尝试通过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拒绝问题感兴趣的资源的更多信息吗?
答案 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)
以系统管理员身份运行它,它肯定会起作用。