--- old/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/EditObject.java 2015-08-25 16:46:37.606333100 +0530 +++ new/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/EditObject.java 2015-08-25 16:46:37.206332500 +0530 @@ -86,7 +86,7 @@ @Override public void setMember(final String name, final Object value) { if (name.equals("editor")) { - this.editor = JSType.toString(value); + this.editor = value != null && value != UNDEFINED? JSType.toString(value) : ""; } } @@ -115,8 +115,10 @@ final SaveHandler saveHandler = new SaveHandler(initText); if (editor != null && !editor.isEmpty()) { ExternalEditor.edit(editor, errorHandler, initText, saveHandler, console); - } else { + } else if (! Main.HEADLESS) { EditPad.edit(errorHandler, initText, saveHandler); + } else { + errorHandler.accept(Main.getMessage("no.editor")); } return UNDEFINED; } --- old/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/Main.java 2015-08-25 16:46:39.806336200 +0530 +++ new/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/Main.java 2015-08-25 16:46:39.446335700 +0530 @@ -25,6 +25,7 @@ package jdk.nashorn.tools.jjs; +import java.awt.GraphicsEnvironment; import java.io.BufferedReader; import java.io.File; import java.io.InputStream; @@ -50,6 +51,7 @@ private Main() {} static final boolean DEBUG = Boolean.getBoolean("nashorn.jjs.debug"); + static final boolean HEADLESS = GraphicsEnvironment.isHeadless(); // file where history is persisted. private static final File HIST_FILE = new File(new File(System.getProperty("user.home")), ".jjs.history"); @@ -202,6 +204,10 @@ return SUCCESS; } + static String getMessage(final String id) { + return bundle.getString(id); + } + private void evalImpl(final Context context, final Global global, final String source, final PrintWriter err, final boolean doe) { try { --- old/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/NashornCompleter.java 2015-08-25 16:46:42.046339300 +0530 +++ new/src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/NashornCompleter.java 2015-08-25 16:46:41.706338800 +0530 @@ -254,6 +254,11 @@ // read file name from the user using by showing a swing file chooser diablog private static String readFileName(final PrintWriter err) { + // if running on AWT Headless mode, don't attempt swing dialog box! + if (Main.HEADLESS) { + return null; + } + final FutureTask fileChooserTask = new FutureTask(() -> { // show a file chooser dialog box final JFileChooser chooser = new JFileChooser(); --- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/tools/resources/Shell.properties 2015-08-25 16:46:44.276342400 +0530 +++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/tools/resources/Shell.properties 2015-08-25 16:46:43.926341900 +0530 @@ -31,3 +31,4 @@ shell.prompt2=...> +no.editor=AWT Headless mode set and no external editor is configured!