2016-08-09 6 views
0

Ich habe ein kleines Tool programmiert, das ein Bild aufnimmt und testeract verwendet, um daraus Daten zu extrahieren. Ich habe Java in Netbeans auf einem 64-Bit-Windows-7-Rechner verwendet. Bis jetzt kompiliert das Programm tadellos und macht, was ich will - einschließlich tesseract -. Aber wenn ich versuche zu reinigen & das fertige Projekt in Netbeans bauen und versuchen, die erzeugte laufen .jar im .cmdTess4j und NetBeans Java Programm - Probleme "AWT-Eventqueue-0" unzufriedener-link-error

java -jar "..\Users\Marv\Scantool.jar" 

ich die folgende Fehlermeldung erhalten:

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) 

Bisher kann ich verengen das Problem auf dieser Linie in meinem Code:

String strResult = instance.doOCR(file); 

ich die „Datei“ überprüft haben, auf die OCR gegeben. Es ist ein vollkommen intaktes .tif-Bild (wie es in Netbeans sowieso gut funktioniert). Eine andere Sache, die ich dachte, könnte das Problem sein, dass das .jar nicht die notwendigen DLLs finden kann. Also kopiere die notwendigen .dlls in den "dist" -Ordner. Mit keinem Erfolg auch nicht. Ich habe die Datei tess4j-1.3.0.jar in die Bibliothek meines Projekts eingegeben.

Es ist schon merkwürdig, dass in NetBeans alles perfekt läuft. Ich glaube, ich vermisse einen Link zu einer Bibliothek, aber ich kann mir keinen vorstellen.

Das ist alles, woran ich denken kann, um Sie zu versorgen. Danke im Voraus!

Antwort

0

Nun, ich habe eine Art von Problem zu umgehen gefunden ...

File dummy = new File(ScanCards.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile().getParentFile(); 
String dirStr = dummy.getPath(); 
instance.setDatapath(dirStr); 
String result = instance.doOCR(file); 

Eigentlich bin ich noch nicht die .jar-Datei laufen, aber ich bin in der Lage es von der Konsole ausgeführt werden. Anstelle der runnable .jar benutze ich nur eine Batch-Datei (einschließlich des 'java -jar PATH \ TO \ MY \ FILE' Codes), um das Programm zu starten.

Ich denke, dass der Schlüssel liegt in der "Java-JAR", scheint es, als ob durch Öffnen der .jar direkt Java nicht geladen ist?