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)
- 3 steps to creating local mirrored Git repositories for your Continuous tests - November 12, 2015
- My key takeaways from NetBeans Day 2015 - October 26, 2015
- JavaOne keynote 2015 - October 25, 2015
- Want to know what it is like to be at JavaOne 2015? - October 24, 2015
- NetBeans Day at JavaOne 2015 - October 22, 2015