diff --git a/apps/desktopgui/src/net/i2p/desktopgui/Main.java b/apps/desktopgui/src/net/i2p/desktopgui/Main.java index 03aa216b6ec2b693c8908b7e7679f9aee7d26747..8cd1ea707d0c980b24d2bc345839ecac2002e92e 100644 --- a/apps/desktopgui/src/net/i2p/desktopgui/Main.java +++ b/apps/desktopgui/src/net/i2p/desktopgui/Main.java @@ -55,19 +55,14 @@ public class Main { * Main method launching the application. */ public static void beginStartup(String[] args) { - boolean wasHeadless = Boolean.valueOf(System.getProperty("java.awt.headless")).booleanValue(); - if(wasHeadless) { - System.setProperty("java.awt.headless", "false"); - } - boolean headless_check = true; try { - // X permissions error is a java.lang.InternalError (a Throwable) - GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - headless_check = ge.isHeadlessInstance(); - } catch (Throwable t) {} - if (wasHeadless) - System.setProperty("java.awt.headless", "true"); - if (headless_check) { + String headless = RouterManager.getRouterContext().getProperty("router.isHeadless"); + boolean isHeadless = Boolean.parseBoolean(headless); + if(isHeadless) { + return; + } + } + catch(Exception e) { return; } try { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java index ada49d0aa737bd4ccbf3a9fd4a4a472d74332ebb..9f280ef2af47371f4fcb3f4b37d2500f2229e1b7 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java @@ -1,6 +1,7 @@ package net.i2p.router.web; import java.util.ArrayList; +import java.awt.GraphicsEnvironment; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; @@ -54,10 +55,51 @@ public class RouterConsoleRunner { private static final String DEFAULT_WEBAPPS_DIR = "./webapps/"; private static final String USAGE = "Bad RouterConsoleRunner arguments, check clientApp.0.args in your clients.config file! " + "Usage: [[port host[,host]] [-s sslPort [host[,host]]] [webAppsDir]]"; + private static final String PROP_HEADLESS = "router.isHeadless"; static { System.setProperty("org.mortbay.http.Version.paranoid", "true"); - System.setProperty("java.awt.headless", "true"); + + //Check if we are in a headless environment, set properties accordingly + List<RouterContext> contexts = RouterContext.listContexts(); + if(contexts != null && contexts.size() > 0) { + RouterContext context = contexts.get(0); + String headless = context.getProperty(PROP_HEADLESS); + if(headless == null) { + /* + * Let's check if we are in a headless environment. + * We do this by setting headless to false + * and trying to get the graphics environment. + * If this fails, we should be headless. + */ + System.setProperty("java.awt.headless", "false"); + try { + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + ge.isHeadlessInstance(); + context.setProperty(PROP_HEADLESS, "false"); + } + catch(InternalError e) { + context.setProperty(PROP_HEADLESS, "true"); + } + context.router().setConfigSetting(PROP_HEADLESS, context.getProperty(PROP_HEADLESS)); + context.router().saveConfig(); + context.router().shutdown(0); + } + boolean isHeadless = true; + try { + isHeadless = Boolean.parseBoolean(headless); + } + catch(Exception e) { + //Incorrect setting, let's choose headless for safety + isHeadless = true; + } + if(isHeadless) { + System.setProperty("java.awt.headless", "true"); + } + else { + System.setProperty("java.awt.headless", "false"); + } + } } /** diff --git a/build.xml b/build.xml index 20616d1c2a00a9d8d8cb2ee1454db1beafa93632..f2413e09015bfff2b88221489a4fd58253ec8e46 100644 --- a/build.xml +++ b/build.xml @@ -97,6 +97,7 @@ </target> <target name="buildDesktopGui" depends="buildCore, buildrouter" > + <ant dir="apps/desktopgui" target="clean" /> <ant dir="apps/desktopgui" target="jar" /> </target> diff --git a/history.txt b/history.txt index ce552f5a937a952d585196502c47984dfab67a98..415d544e8026060f9bcb19bfa1ba8f33010e3d4a 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,7 @@ +2011-02-11 Mathiasdm + * routerconsole: fixed graphs using jrobin; and headless issue + in general: no more switches between headless and non-headless. + 2011-02-11 sponge * I2PTunnel: fix NPE in I2PTunnelConnectClient