JavaアプリケーションのGUI部品をヘッドレス(画面無し)でも使えるようにするプロパティ、java.awt.headlessのがあります。
これはあくまで軽量コンポーネント(SwingのJLabelなど)を扱うためのもので、重量コンポーネント(java.awt.Label)などは扱えません。
そういえばJFrameも重量コンポーネントなのでフレームを内部で表示するようなテストは動かせないのでした。
https://stackoverflow.com/questions/41067235/what-is-the-benefit-of-setting-java-awt-headless-true
再現コード:
import javax.swing.*; class Scratch { public static void main(String[] args) { System.setProperty("java.awt.headless", "true"); new JFrame().setVisible(true); } }
実行結果:
Exception in thread "main" java.awt.HeadlessException at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204) at java.awt.Window.(Window.java:536) at java.awt.Frame. (Frame.java:420) at java.awt.Frame. (Frame.java:385) at javax.swing.JFrame. (JFrame.java:189) at Scratch.main(scratch_332.java:7)
うっかりしているとハマるかもしれないのでメモ。(実際、GitHub Actionsでテストが落ちた)