Index: trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 11277)
+++ trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 11278)
@@ -44,5 +44,5 @@
         putValue("toolbar", "fullscreen");
         Main.toolbar.register(this);
-        gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
+        gd = GraphicsEnvironment.isHeadless() ? null : GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
         setSelected(Main.pref.getBoolean("draw.fullscreen", false));
         notifySelectedState();
@@ -79,10 +79,12 @@
         boolean selected = isSelected();
 
-        frame.dispose();
-        frame.setUndecorated(selected);
+        if (frame != null) {
+            frame.dispose();
+            frame.setUndecorated(selected);
 
-        if (selected) {
-            prevBounds = frame.getBounds();
-            frame.setBounds(new Rectangle(GuiHelper.getScreenSize()));
+            if (selected) {
+                prevBounds = frame.getBounds();
+                frame.setBounds(new Rectangle(GuiHelper.getScreenSize()));
+            }
         }
 
@@ -94,18 +96,22 @@
         // screen by default (it's a simulated mode, but should be ok)
         String exclusive = Main.pref.get("draw.fullscreen.exclusive-mode", "auto");
-        if ("true".equals(exclusive) || ("auto".equals(exclusive) && !Main.isPlatformWindows())) {
+        if (("true".equals(exclusive) || ("auto".equals(exclusive) && !Main.isPlatformWindows())) && gd != null) {
             gd.setFullScreenWindow(selected ? frame : null);
         }
 
-        if (!selected && prevBounds != null) {
+        if (!selected && prevBounds != null && frame != null) {
             frame.setBounds(prevBounds);
         }
 
         for (Window wind : visibleWindows) {
-            wind.setVisible(true);
+            if (wind != null) {
+                wind.setVisible(true);
+            }
         }
 
         // Free F10 key to allow it to be used by plugins, even after full screen (see #7502)
-        frame.getJMenuBar().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "none");
+        if (frame != null) {
+            frame.getJMenuBar().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "none");
+        }
     }
 }
Index: trunk/test/unit/org/openstreetmap/josm/actions/FullscreenToggleActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/FullscreenToggleActionTest.java	(revision 11278)
+++ trunk/test/unit/org/openstreetmap/josm/actions/FullscreenToggleActionTest.java	(revision 11278)
@@ -0,0 +1,31 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Test {@link FullscreenToggleAction}
+ */
+public class FullscreenToggleActionTest {
+    /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().platform().commands();
+
+    /**
+     * Test {@link FullscreenToggleAction}
+     */
+    @Test
+    public void testFullscreenToggleAction() {
+        FullscreenToggleAction action = new FullscreenToggleAction();
+        // Cannot really test it in headless mode, but at least check we can toggle the action without error
+        action.actionPerformed(null);
+        action.actionPerformed(null);
+    }
+}
