You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jacob报错java.lang.NoSuchFieldError问题排查求助

问题:Jacob连接AutoIt时出现NoSuchFieldError错误

我用以下Java脚本借助Jacob连接AutoIt:

File file = new File("lib", "jacob-1.20-x64.dll");
System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath());

AutoItX x = new AutoItX();
String Openfile = "Open";
try {
  Thread.sleep(2000);
} catch (InterruptedException e) {
  e.printStackTrace();
}
x.winActive(Openfile);
x.winWaitActive(Openfile);

// 控制文件选择窗口
x.controlClick("Open", "", "1001");
x.send("C:\\MVS_TEAM\\MVS_Automation_Tests");
x.send("{ENTER}!n", false );
x.sleep(2000);
x.controlClick("Open", "", "1");
x.send(TemplateName);
x.send("{ENTER}!n", false );
x.sleep(1000);
x.send("{ENTER}!n", false );

但运行时遇到如下错误:

java.lang.NoSuchFieldError: com.jacob.activeX.ActiveXComponent.m_pDispatch J

    at com.jacob.com.Dispatch.createInstanceNative(Native Method)
    at com.jacob.com.Dispatch.<init>(Dispatch.java:101)
    at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java:58)
    at autoitx4java.AutoItX.<init>(AutoItX.java:231)
    at StagingEnv_CAMS_Tests.Get_VW_Petrol_Stage.Test_Case(Get_VW_Petrol_Stage.java:181)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:577)
    at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
    at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:677)
    at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:221)
    at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50)
    at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:962)
    at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:194)
    at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148)
    at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    at org.testng.TestRunner.privateRun(TestRunner.java:806)
    at org.testng.TestRunner.run(TestRunner.java:601)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:433)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:427)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:387)
    at org.testng.SuiteRunner.run(SuiteRunner.java:330)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1256)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1176)
    at org.testng.TestNG.runSuites(TestNG.java:1099)
    at org.testng.TestNG.run(TestNG.java:1067)
    at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
    at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)

我已确认lib目录中的Jacob和AutoIt jar包、已注册的autoItX.dll均正常,请问该如何解决这个Jacob相关的错误?

解决方案

这个错误核心原因是Jacob的JAR包与本地DLL版本不匹配,Native方法调用时找不到对应类的字段,按以下步骤修复:

  • 严格匹配版本:确保使用的Jacob JAR包版本和jacob-1.20-x64.dll完全一致,比如DLL是1.20版本,JAR必须是jacob-1.20.jar,不能混用其他版本。
  • 清理依赖冲突:检查项目依赖,移除旧版本或重复的Jacob JAR包,避免类加载时版本混乱。
  • 匹配系统位数:x64版本的DLL必须运行在64位JVM环境下,不能用32位JDK启动程序。
  • 验证DLL加载路径:可以尝试将DLL放到JRE的bin目录,或系统PATH包含的目录中,避免路径加载失败;也可以打印file.getAbsolutePath()确认路径是否正确。
  • 清理缓存重启:重启IDE和测试环境,清除旧的类加载缓存。

内容的提问来源于stack exchange,提问作者Shiva Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:31:04