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)
- Picking our brains on your PDF problems while we are in Boston and San Francisco… - August 31, 2017
- Why you should read Seth Godin’s ‘Meatball Sundae’ (and attend this years Business of Software Conference) - August 22, 2017
- How we have revamped our support in 2017 - July 5, 2017
- Is attending JavaOne still worth the hassle? - June 21, 2017
- Is it still worth attending software conferences in 2017? - June 1, 2017