Botte de printemps: java.awt.HeadlessException
Lorsque nous essayons d'obtenir l'instance du Presse-papiers.
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
J'ai également essayé d'exécuter l'application Spring boot en définissant la tête.
SpringApplicationBuilder builder = new SpringApplicationBuilder(SpringBootApplication.class,args);
builder.headless(false).run(args);
Nous obtenons ci-dessous exception.
java.awt.HeadlessException
at sun.awt.HeadlessToolkit.getSystemClipboard(HeadlessToolkit.java:309)
at com.kpit.ecueditor.core.utils.ClipboardUtility.copyToClipboard(ClipboardUtility.java:57)
Quelqu'un peut-il me suggérer ce qui me manque.
Si j'exécute le même code du presse-papiers dans une application java simple , cela fonctionne mais pas dans l'application spring boot.
1 answers
J'ai eu la même exception, en utilisant Spring Boot 2 dans une application swing.
Voici un exemple de ce qui a fonctionné pour moi:
Dans la classe principale:
//Main.java
@SpringBootApplication
public class Main implements CommandLineRunner {
public static void main(String[] args) {
ApplicationContext contexto = new SpringApplicationBuilder(Main.class)
.web(WebApplicationType.NONE)
.headless(false)
.bannerMode(Banner.Mode.OFF)
.run(args);
}
@Override
public void run(String... args) throws Exception {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame();
frame.setVisible(true);
});
}
}
Dans la classe test, vous devrez définir java.awt.propety sans tête, de sorte que vous n'obtiendrez pas un java.awt.HeadlessException lors du test du code:
//MainTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class MainTest {
@BeforeClass
public static void setupHeadlessMode() {
System.setProperty("java.awt.headless", "false");
}
@Test
public void someTest() { }
}
Pour ceux qui ont cette exception en utilisant JavaFX cette réponse pourrait aider.