Java headless 异常?

标签 java unit-testing junit sonarqube

我正在尝试在 Eclipse 中对我的 java GUI 源代码进行单元测试。

当我使用 jUnit 执行单元测试时,所有测试都成功。

但是,我在 SonarQube 报告中遇到了一个小异常,并且我在 Eclipse 中成功的测试报告全部失败。

异常消息在这里。

No X11 DISPLAY variable was set, but this program performed an operation which requires it.
java.awt.HeadlessException: 
  No X11 DISPLAY variable was set, but this program performed an operation which requires it.
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
    at java.awt.Window.<init>(Window.java:536)
    at java.awt.Frame.<init>(Frame.java:420)
    at javax.swing.JFrame.<init>(JFrame.java:233)
    at com.kaist.se.pmpdaemon.MainFrame.<init>(MainFrame.java:56)
    at com.kaist.se.pmpdaemon.MainFrameTest.testSetMainText(MainFrameTest.java:80)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)

我应该做什么?

最佳答案

您必须将 Sonar/测试服务器移动到最终运行的同一环境 - 在您的情况下为 Windows。可见,AWT 使用平台 GUI 环境。因此,它从系统中获取图形部分。换句话说 - Windows 上的标签看起来与 Mac 上不同,在 Unix 上也不同。在最后一种情况下,Unix 可能根本没有图形环境,因此您也将没有标签。 Headless允许您在没有平台支持的情况下编译和运行“图形”环境。

关于Java headless 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640902/

相关文章:

junit - Hamcrest - Matchers.hasProperty : how to check if a List of objects contains an object with a concrete value

intellij-idea - 执行 JUnit 运行程序类时没有可用的任务

java - Eclipse 通知的 android 中未处理的异常

java - 如何从给定的数字列表中使用Java生成随机数

python - 模拟 - 如何在调用者上引发异常?

java - 使用 Jacoco 对使用 Powermock 编写的测试类进行单元测试覆盖

java - 使用默认命名空间时无法解码编码文档

java - 在 Ubuntu10.04 Linux 中启动 Jade

c# - 如果未找到 csv 文件,则跳过单元测试

java - 如何将 HttpServletRequest 对象传递给测试用例?