首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tess4j和NetBeans Java编程-问题"AWT-Eventqueue-0“不符合要求-链接错误

Tess4j和NetBeans Java编程-问题"AWT-Eventqueue-0“不符合要求-链接错误
EN

Stack Overflow用户
提问于 2016-08-09 21:31:47
回答 1查看 236关注 0票数 0

我已经编写了一个小工具,它可以获取图像并使用tesseract从其中提取数据。我在64位的Windows7机器上使用过Netbeans中的Java。到目前为止,这个程序编译得很好,可以做我想做的事情- -包括tesseract -。但是,当我尝试在Netbeans中清理和构建完成的项目,并尝试在.cmd中运行生成的.jar时

代码语言:javascript
复制
java -jar "..\Users\Marv\Scantool.jar"

我得到以下错误:

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: The module can not be found

                at com.sun.jna.Native.open(Native Method)
                at com.sun.jna.Native.open(Native.java:1759)
                at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
                at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
                at com.sun.jna.Library$Handler.<init>(Library.java:147)
                at com.sun.jna.Native.loadLibrary(Native.java:412)
                at com.sun.jna.Native.loadLibrary(Native.java:391)
                at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:45)
                at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:283)
                at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:219)
                at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:168)
                at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:152)
                at ScanCards.ScanCards.extraction(ScanCards.java:64)
                at ScanCards.ScanCards.scan(ScanCards.java:37)
                at ScanCards.ScanCardsGUI.scanButtonActionPerformed(ScanCardsGUI.java:16
        0)
                at ScanCards.ScanCardsGUI.access$100(ScanCardsGUI.java:22)
                at ScanCards.ScanCardsGUI$2.actionPerformed(ScanCardsGUI.java:73)
                at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:20
        22)
                at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
        a:2348)
                at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
        .java:402)
                at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259
        )
                at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
        istener.java:252)
                at java.awt.Component.processMouseEvent(Component.java:6535)
                at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
                at java.awt.Component.processEvent(Component.java:6300)
                at java.awt.Container.processEvent(Container.java:2236)
                at java.awt.Component.dispatchEventImpl(Component.java:4891)
                at java.awt.Container.dispatchEventImpl(Container.java:2294)
                at java.awt.Component.dispatchEvent(Component.java:4713)
                at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888
        )
                at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)

                at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
                at java.awt.Container.dispatchEventImpl(Container.java:2280)
                at java.awt.Window.dispatchEventImpl(Window.java:2750)
                at java.awt.Component.dispatchEvent(Component.java:4713)
                at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
                at java.awt.EventQueue.access$500(EventQueue.java:97)
                at java.awt.EventQueue$3.run(EventQueue.java:709)
                at java.awt.EventQueue$3.run(EventQueue.java:703)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionP
        rivilege(ProtectionDomain.java:76)
                at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionP
        rivilege(ProtectionDomain.java:86)
                at java.awt.EventQueue$4.run(EventQueue.java:731)
                at java.awt.EventQueue$4.run(EventQueue.java:729)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionP
        rivilege(ProtectionDomain.java:76)
                at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
                at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
        ad.java:201)
                at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
        java:116)
                at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
        ad.java:105)
                at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

                at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
                at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

到目前为止,我可以在我的代码中将问题缩小到下面这一行:

代码语言:javascript
复制
String strResult = instance.doOCR( file);

我已经检查了给OCR的“文件”。它是一个完美的.tif-image文件(因为它可以在Netbeans中正常工作)。另一件事,我认为这可能是问题的.jar找不到测试服务器必要的.dlls。因此,我们将必要的.dlls复制到"dist"-folder中。也没有成功。我已经将tess4j-1.3.0.jar绑定到我的项目库中。

非常奇怪的是,在NetBeans中一切都运行得很好。我想我错过了一个指向图书馆的链接,但我想不出任何链接。

这就是我能想到的能提供给你的了。提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-08-10 14:55:32

好吧,我找到了一种变通办法...

代码语言:javascript
复制
File dummy = new File( ScanCards.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile().getParentFile();
String dirStr = dummy.getPath();
instance.setDatapath( dirStr);
String result = instance.doOCR( file);

实际上,我仍然无法运行.jar-file,但我可以从控制台运行它。因此,我只是使用一个批处理文件(包括'java -jar PATH\ to \MY\ .jar‘代码)来启动程序,而不是使用可运行的文件。

我想,关键在于"java -jar",好像直接打开.jar java是不是加载了?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38852242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档