报错信息如下:
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]
该错误通常是由于未正确设置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
···
这个错误提示是由于 JMeter 在启动时尝试创建一个提供程序和设备无关的用户界面,但发现当前环境不支持此类型的界面,因此抛出了 HeadlessException
异常。
jmeter-server
为非GUI模式:运行JMeter时,使用非GUI模式而不是默认的GUI模式。可以通过在命令行或脚本中使用以下参数来启用非GUI模式:jmeter -n -t <test_file.jmx>
。jmeter.properties
文件中将以下属性 jmeter.gui.action.on_quit
设置为 save
,禁用退出时保存图形界面状态并强制关闭图形界面。然后,在运行 JMeter 之前,使用命令行参数 -Djava.awt.headless=true
来禁用图形界面。这个错误提示是由于在缺少图形界面的环境中运行了需要图形界面的代码所导致的。
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错误的出现。