Java Tess4J调用TargetException

Java Tess4J调用TargetException,java,eclipse,maven,tesseract,tess4j,Java,Eclipse,Maven,Tesseract,Tess4j,我在eclipse编译器外部运行以下java代码时遇到问题。在编译器内部,它可以正常工作,但在导出为可运行jar后,我得到了InvocationTargetException。我相信这与dll文件有关,但在阅读了这里的其他解决方案并尝试实现它们之后,问题仍然没有得到解决。那么我的问题是,是否可以通过代码或设置来配置eclipse以正确导出程序 相关代码 顺便说一句,C:\Program Files\Tesseract OCR包含tessdata、gsdll64.dll、liblept170.dl

我在eclipse编译器外部运行以下java代码时遇到问题。在编译器内部,它可以正常工作,但在导出为可运行jar后,我得到了InvocationTargetException。我相信这与dll文件有关,但在阅读了这里的其他解决方案并尝试实现它们之后,问题仍然没有得到解决。那么我的问题是,是否可以通过代码或设置来配置eclipse以正确导出程序

相关代码

顺便说一句,C:\Program Files\Tesseract OCR包含tessdata、gsdll64.dll、liblept170.dll、libtesseract303.dll

Maven依赖项包括tess4j、junit和ghost4j

public Bot() {
        System.setProperty("jna.library.path", "C:/Program Files/Tesseract-OCR");
        ocr2 =  new Tesseract();
        ocr2.setDatapath("C:/Program Files/Tesseract-OCR");
        initLists();
        System.out.println(scan(0,0,500,500));
    }
public String scan(int x, int y, int x2, int y2) {
        BufferedImage i = rob.getScreen(x, y, x2, y2);
        i = toBufferedImage(i.getScaledInstance(i.getWidth()*2, i.getHeight() *2, Image.SCALE_SMOOTH));
        try {
            return ocr2.doOCR(i).trim();
        } catch (TesseractException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "";
    }
错误

C:\Users\Blue\Desktop>java-jarbot.jar
线程“main”java.lang.reflect.InvocationTargetException中出现异常
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
原因:java.lang.UnsatifiedLink错误:找不到指定的模块。
位于com.sun.jna.Native.open(本机方法)
位于com.sun.jna.Native.open(Native.java:1759)
位于com.sun.jna.nativellibrary.loadLibrary(nativellibrary.java:260)
位于com.sun.jna.nativellibrary.getInstance(nativellibrary.java:398)
位于com.sun.jna.Library$Handler。(Library.java:147)
位于com.sun.jna.Native.loadLibrary(Native.java:412)
位于com.sun.jna.Native.loadLibrary(Native.java:391)
位于net.sourceforge.tess4j.util.LoadLibs.getTestSapiInstance(LoadLibs.java:78)
位于net.sourceforge.tess4j.TessAPI(TessAPI.java:40)
位于net.sourceforge.tess4j.Tesseract.init(Tesseract.java:360)
位于net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:273)
位于net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:256)
位于net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:237)
位于net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:221)
在debug.Bot.scan(Bot.java:480)处
在debug.Bot.(Bot.java:53)
位于debug.Bot.main(Bot.java:24)
... 还有5个
C:\Users\Blue\Desktop>暂停
按任意键继续。

如果有人遇到类似问题,我所做的就是将3.dll文件复制到我的System32文件夹中。然后我遇到了image.io的问题,该网站对此有很多答案。我的个人解决方案是将jar作为我的代码和库的单独文件夹导出。

您确认打包的jar文件中存在org.eclipse.jdt.internal.jarinjarloader.jarrscloader吗?如果它不存在,那么也许您可以尝试这里的建议:谢谢,我设法找到了一个有效的修复程序。您不需要设置
jna.library.path
变量或触摸DLL,除非您想加载自己的自定义库。
C:\Users\Blue\Desktop>java -jar bot.jar
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: The specified module could 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.util.LoadLibs.getTessAPIInstance(LoadLibs.java:78)
        at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:40)
        at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:360)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:273)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:256)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:237)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:221)
        at debug.Bot.scan(Bot.java:480)
        at debug.Bot.<init>(Bot.java:53)
        at debug.Bot.main(Bot.java:24)
        ... 5 more

C:\Users\Blue\Desktop>pause
Press any key to continue . . .