Java contains a lot of classes which assume that there is a some sort of display and a keyboard attached. Sometimes, you are writing code to run on a server which does not have these and this is called Headless mode. Since Java 1.4 you have been able to explicitly tell Java to run in Headless mode with
This can cause issues with some Java code, especially Swing (which was designed for display and much of which assumes there is a display device attached).
So Sun/Oracle have a option to tell if the code is running in Headless mode, and avoid using GUI components if you have no display. You can find out by using the GraphicsEnvironment class and calling the static method isHeadless(). If you try and create Swing components in Headless mode you will get a Headless exception.
There are some GUI components you could need in Headless mode (for Example Canvas so that you can print), so a subset of Swing components will run in Headless mode (essentially Canvas, Panel, Image and Font classes).
So if your code might run in Headless mode, you need to ensure that Swing components such as Lists, Frames, Buttons are only initialised if there is a Display available. You might even consider following the approach we have adopted for our Java PDF library where we have a PdfDecoder class designed to run on systems with a display and a PdfDecoderServer class alternative (with the same API), specifically setup to run on Headless systems.
If you are looking for more information, Oracle have an excellent reference article here.
Latest posts by Mark Stephens (see all)
- The 2017 Guide to PDF Files – Creation II - January 19, 2017
- The 2017 Guide to to PDF Files – Creation I - January 17, 2017
- 7 ways we might change the way we develop software in 2017 - January 6, 2017
- IDRsolutions will move to Java8 in April 2017 - November 8, 2016
- Is moving NetBeans to Apache good or bad news? - September 29, 2016