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

Windows Jenkins(JDK1.8)下java.awt.Toolkit初始化失败问题求助

Windows Jenkins环境(JDK1.8)自动化测试报错解决

报错信息

java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit
at com.pypestream.model.page.aaas.InterfacePage.enterCustomCssCode(InterfacePage.java:465)
at com.pypestream.model.page.aaas.InterfacePage$$FastClassBySpringCGLIB$$c2ab0743.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
at com.pypestream.aop.AspectLogger.processMethod(AspectLogger.java:54)
at com.pypestream.aop.AspectLogger.logPage(AspectLogger.java:16)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
at com.pypestream.model.page.aaas.InterfacePage$$EnhancerBySpringCGLIB$$c20d0dcd.enterCustomCssCode(<generated>)
at com.pypestream.test.regressionsuite.Pypes_New_Suit.CSS_ClassName.tc_153789_153791_VerifyThatBotCsvWithCSSClassnameColumnAtTheEndCanBeUploadedInDesignStudio(CSS_ClassName.java:90)
at java.util.ArrayList.forEach(ArrayList.java:1259)
... Removed 34 stack frames

触发场景

尝试添加以下CSS代码时触发错误:

(".font_text{\n" + "    font-style: italic;\n" + "}")

问题代码(本地正常,Jenkins执行失败)

public page enterdataCode(String name) {
    $(".view-lines").shouldBe(Condition.visible).click();
    System.setProperty("java.awt.headless", "false");
    StringSelection stringSelection = new StringSelection(name);
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(stringSelection, null);
    Actions builder = new Actions(WebDriverRunner.getWebDriver());
    builder.keyDown(Keys.CONTROL)
           .sendKeys(Keys.chord("v"))
           .keyUp(Keys.CONTROL)
           .perform();
    System.setProperty("java.awt.headless", "true");
    return this;
}

解决方案

原因分析

Jenkins默认以无头模式运行,缺少AWT工具包依赖的图形环境,导致java.awt.Toolkit无法初始化。代码中动态设置java.awt.headless为false的操作时机太晚,且Jenkins服务本身未配置图形支持。

具体修复方案

方案1:替换剪贴板操作,彻底规避AWT依赖

直接使用WebDriver的输入方法发送文本,无需依赖系统剪贴板:

public page enterdataCode(String name) {
    WebElement editor = $(".view-lines").shouldBe(Condition.visible).element();
    editor.click();
    // 全选清空原有内容后输入新文本
    Actions builder = new Actions(WebDriverRunner.getWebDriver());
    builder.keyDown(Keys.CONTROL)
           .sendKeys("a")
           .keyUp(Keys.CONTROL)
           .sendKeys(Keys.BACK_SPACE)
           .sendKeys(name)
           .perform();
    return this;
}

方案2:配置Jenkins支持图形环境

若必须保留剪贴板操作,需给Jenkins配置图形界面权限:

  1. 打开Windows服务管理器,找到Jenkins服务,右键选择"属性";
  2. 切换到"登录"选项卡,勾选"允许服务与桌面交互";
  3. 在Jenkins全局配置的JVM参数中添加:-Djava.awt.headless=false。

方案3:提前设置headless参数

将System.setProperty("java.awt.headless", "false")移到测试代码启动的最早期(如测试类的静态代码块),确保在AWT类加载前生效:

static {
    System.setProperty("java.awt.headless", "false");
}

内容的提问来源于stack exchange,提问作者Sumanth S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:45:56