首页 新闻 会员 周边

jmeter报错java.awt.HeadlessException: null

0
悬赏园豆:10 [已解决问题] 解决于 2026-03-17 10:21

报错信息如下:

2023-06-06 12:24:07,969 ERROR o.a.j.JMeter: An error occurred: 
java.awt.HeadlessException: null
	at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204) ~[?:1.8.0_231]
	at java.awt.Window.<init>(Window.java:536) ~[?:1.8.0_231]
	at java.awt.Frame.<init>(Frame.java:420) ~[?:1.8.0_231]
	at java.awt.Frame.<init>(Frame.java:385) ~[?:1.8.0_231]
	at javax.swing.SwingUtilities$SharedOwnerFrame.<init>(SwingUtilities.java:1763) ~[?:1.8.0_231]
	at javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1838) ~[?:1.8.0_231]
	at javax.swing.JDialog.<init>(JDialog.java:272) ~[?:1.8.0_231]
	at javax.swing.JDialog.<init>(JDialog.java:206) ~[?:1.8.0_231]
	at javax.swing.JDialog.<init>(JDialog.java:154) ~[?:1.8.0_231]
	at org.apache.jmeter.SplashScreen.<init>(SplashScreen.java:52) ~[ApacheJMeter_core.jar:5.5]
	at org.apache.jmeter.JMeterGuiLauncher.startGuiInternal(JMeterGuiLauncher.kt:87) ~[ApacheJMeter_core.jar:5.5]
	at org.apache.jmeter.JMeterGuiLauncher.access$startGuiInternal(JMeterGuiLauncher.kt:47) ~[ApacheJMeter_core.jar:5.5]
	at org.apache.jmeter.JMeterGuiLauncher$startGui$1$1.invokeSuspend(JMeterGuiLauncher.kt:67) ~[ApacheJMeter_core.jar:5.5]
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[kotlin-stdlib-1.6.21.jar:1.6.21-release-334(1.6.21)]
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) ~[kotlinx-coroutines-core-jvm-1.6.1.jar:?]
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) ~[?:1.8.0_231]
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) ~[?:1.8.0_231]
	at java.awt.EventQueue.access$500(EventQueue.java:97) ~[?:1.8.0_231]
	at java.awt.EventQueue$3.run(EventQueue.java:709) ~[?:1.8.0_231]
	at java.awt.EventQueue$3.run(EventQueue.java:703) ~[?:1.8.0_231]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) ~[?:1.8.0_231]
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) ~[?:1.8.0_231]
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) ~[?:1.8.0_231]
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) ~[?:1.8.0_231]
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) ~[?:1.8.0_231]
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) ~[?:1.8.0_231]
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) ~[?:1.8.0_231]
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) ~[?:1.8.0_231]

ycyzharry的主页 ycyzharry | 高人七级 | 园豆:25711
提问于:2023-06-07 01:03
< >
分享
最佳答案
0

这个错误提示是由于 JMeter 在启动时尝试创建一个提供程序和设备无关的用户界面,但发现当前环境不支持此类型的界面,因此抛出了 HeadlessException 异常。

  1. 设置jmeter-server为非GUI模式:运行JMeter时,使用非GUI模式而不是默认的GUI模式。可以通过在命令行或脚本中使用以下参数来启用非GUI模式:jmeter -n -t <test_file.jmx>
  2. 禁用图形界面:如果要在GUI模式下运行JMeter,可以禁用图形界面来避免此问题。可以通过在 jmeter.properties 文件中将以下属性 jmeter.gui.action.on_quit 设置为 save,禁用退出时保存图形界面状态并强制关闭图形界面。然后,在运行 JMeter 之前,使用命令行参数 -Djava.awt.headless=true 来禁用图形界面。
  3. 检查当前系统配置:如果你无法禁用图形界面,并且仍然遇到此问题,则可以检查当前系统的 GUI 是否可用,或者是否缺少必需的包或库。
    4.确保您已经安装了 Java 运行时环境(JRE)或 Java 开发工具包(JDK),并且已将其添加到系统 PATH 环境变量中。
    5.确保您的 JMeter 版本与您的 Java 版本兼容。请查看 JMeter 官方文档以获取有关 JMeter 版本和 Java 版本兼容性的信息。
    6.如果您使用的是 Linux 或 macOS 系统,请确保您已安装 X11 服务器。
    7.如果您使用的是 Windows 系统,请确保您已安装正确的 Microsoft Visual C++ 运行时库。
收获园豆:10
lanedm | 老鸟四级 |园豆:2406 | 2023-06-07 08:42
其他回答(3)
0

该错误通常是由于未正确设置JMeter的Java虚拟机(JVM)参数导致的。

要解决此错误,请在JMeter的jmeter.bat / jmeter.sh脚本中添加以下内容:
···
set JVM_ARGS="-Djava.awt.headless=true"
···
此外,您可以使用以下命令来启动JMeter:
···
jmeter -n -t test.jmx -l results.jtl -j jmeter.log -Jjmeter.save.saveservice.output_format=csv -Jjmeter.save.saveservice.assertion_results=all -Jjmeter.save.saveservice.response_data.on_error=true -Jjmeter.save.saveservice.samplerData=true -Jjmeter.save.saveservice.requestHeaders=true
···

Tom.汤 | 园豆:3073 (老鸟四级) | 2023-06-07 08:14
0

这个错误提示是由于在缺少图形界面的环境中运行了需要图形界面的代码所导致的。

JMeter是一个Java编写的性能测试工具,通常在图形界面中使用。然而,有时候在没有图形界面的环境中运行JMeter时,就会遇到java.awt.HeadlessException错误。

为了解决这个问题,你可以采取以下措施之一:

配置无头模式(Headless Mode):将JMeter配置为无头模式,以在没有图形界面的环境中运行。你可以通过在JMeter启动脚本中添加以下参数来实现无头模式:

arduino
Copy code
-Djava.awt.headless=true
在命令行中运行JMeter时,将该参数添加到启动命令中。例如:

arduino
Copy code
java -Djava.awt.headless=true -jar ApacheJMeter.jar
使用非 GUI 模式:如果你只是想运行性能测试而不需要图形界面,则可以使用 JMeter 的非 GUI 模式运行测试。在非 GUI 模式下,不需要图形界面,因此可以避免java.awt.HeadlessException错误。

使用以下命令来运行 JMeter 的非 GUI 模式:

Copy code
jmeter -n -t your_test_plan.jmx -l your_results.jtl
其中,your_test_plan.jmx 是你的测试计划文件,your_results.jtl 是结果输出文件。

通过采取上述措施之一,你应该能够在没有图形界面的环境中成功运行 JMeter,避免java.awt.HeadlessException错误的出现。

Technologyforgood | 园豆:8059 (大侠五级) | 2023-06-07 22:16
0

这个错误明确指向 JMeter 试图启动图形用户界面(GUI),但当前运行环境不支持图形显示。让我们一步步分析原因并给出解决方案。

🔍 错误原因分析
从堆栈信息可以看出:

JMeter 在启动时调用了 SplashScreen(启动画面)和 JMeterGuiLauncher,表明它正在尝试以 GUI 模式 运行。

您的 Java 版本为 1.8.0_231,运行在一个 无头(headless)环境 中。Headless 环境通常指没有显示器、键盘或鼠标的服务器,或是在 Docker 容器、云主机等缺少图形界面的系统。

Java 检测到当前环境不支持图形操作(GraphicsEnvironment.checkHeadless()),于是抛出 HeadlessException,阻止了 GUI 的创建。

典型场景:

您通过 SSH 登录到一台 Linux 服务器,直接执行了 jmeter 命令(不带参数)。

您将 JMeter 部署在 Docker 容器中,但没有配置图形转发,却试图打开 GUI。

您的系统环境变量 JAVA_OPTS 中设置了 -Djava.awt.headless=true,强制 Java 以 headless 模式运行,而 JMeter GUI 需要图形支持。

✅ 解决方案
根据您的实际需求,可以选择以下一种方法:

1️⃣ 如果您的目的是 执行性能测试(非 GUI 模式)
JMeter 官方强烈建议在服务器上使用 非 GUI 模式 运行测试,以避免图形界面消耗资源,并且更稳定。

命令示例:

bash
jmeter -n -t /path/to/your/testplan.jmx -l /path/to/results.jtl
-n 表示非 GUI 模式

-t 指定测试计划文件

-l 指定结果日志文件

如果您需要生成 HTML 报告,可以后续执行:

bash
jmeter -g /path/to/results.jtl -o /path/to/report
2️⃣ 如果您的目的是 编辑测试脚本(需要 GUI)
本地运行:将测试脚本复制到您本地有图形界面的机器(Windows / macOS / Linux 桌面),然后用 JMeter GUI 打开编辑。

远程 X11 转发:如果必须远程使用 GUI,确保您的服务器安装了 X11 环境,并且您通过 SSH 连接时启用了 X11 转发(ssh -X user@server),同时服务器上安装了 xauth 等必要的 X11 库。但这种方法通常较慢且不稳定,不推荐用于 JMeter。

3️⃣ 如果您的环境是 Docker 容器
若要在容器内运行 GUI,需要将宿主机的 X11 socket 挂载到容器,并设置 DISPLAY 环境变量。但这会引入安全风险,通常仅用于临时调试。更好的做法是在容器内只运行非 GUI 模式。

如果误将 GUI 启动命令写入 Docker 启动脚本,请改为非 GUI 命令。

4️⃣ 检查启动脚本
确保您没有直接双击 jmeter 脚本或执行 jmeter 而不带参数。在某些系统中,jmeter 命令默认可能启动 GUI(取决于别名或包装脚本)。您可以运行 jmeter --version 确认输出,或使用绝对路径并明确加上 -n。

📌 总结
根本原因:您在一个无图形界面的环境中尝试启动 JMeter 的 GUI 模式。
最佳实践:在服务器上始终使用 非 GUI 模式(jmeter -n ...)执行测试。
附:检查当前环境是否 headless
运行以下 Java 命令可以快速检测:

bash
java -ea -Djava.awt.headless=true -cp . YourClass # 或直接测试
但更简单的是,观察您启动 JMeter 时是否通过 SSH 或容器操作。

ycyzharry | 园豆:25711 (高人七级) | 2026-03-17 10:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册