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)
- Announcing JDeli – a new Image library for Java - April 21, 2015
- Report on NetBeans Day Greece 2015 - April 18, 2015
- My First Visit to London Book Fair - April 14, 2015
- Sneak preview of upcoming enhancements to our PDF to HTML5/SVG converter - April 13, 2015
- 3 Reasons to attend NetBeans Day in Athens (17-18 April 2015) - March 24, 2015