{
private final static String startClass = "jalview.bin.Jalview";
+ // not setting this yet due to problem with Jmol
private final static String headlessProperty = "java.awt.headless";
+ // used for headless macOS
+ private final static String macosHeadlessProperty = "apple.awt.UIElement";
+
+ // arguments that assume headless mode
+ private final static String[] assumeHeadlessArgs = { "headless", "output",
+ "image", "structureimage" };
+
/**
* main method for jalview.bin.Launcher. This restarts the same JRE's JVM with
* the same arguments but with memory adjusted based on extracted -jvmmempc
boolean wait = true;
boolean quiet = false;
boolean headless = false;
+ boolean assumeheadless = false;
boolean gui = false;
+ boolean help = false;
boolean stdout = false;
// must set --debug before --launcher...
boolean launcherstop = false;
boolean launcherwait = false;
ArrayList<String> arguments = new ArrayList<>();
String previousArg = null;
+ // set debug first
for (String arg : args)
{
if (arg.equals("--debug"))
{
debug = true;
}
+ }
+ for (String arg : args)
+ {
if (arg.equals("--quiet"))
{
quiet = true;
}
- if (arg.equals("--headless"))
- {
- headless = true;
- }
- if (arg.equals("--gui"))
+ else if (arg.equals("--gui"))
{
gui = true;
}
- if (arg.equals("--output=-")
- || (arg.equals("-") && "--output".equals(previousArg)))
+ else if (arg.equals("--help"))
{
- stdout = true;
+ help = true;
}
- if (debug && arg.equals("--launcherprint"))
+ else if (arg.equals("--version"))
{
- launcherprint = true;
+ help = true;
}
- if (debug && arg.equals("--launcherstop"))
+
+ if (!assumeheadless)
{
- launcherstop = true;
+ for (String a : assumeHeadlessArgs)
+ {
+ if (arg.equals("--" + a) || arg.startsWith("--" + a + "="))
+ {
+ assumeheadless = true;
+ }
+ }
}
- if (debug && arg.equals("--launcherwait"))
+
+ if (arg.equals("--output=-")
+ || (arg.equals("-") && "--output".equals(previousArg)))
{
- launcherwait = true;
+ stdout = true;
}
- // this ends the launcher immediately
- if (debug && arg.equals("--launchernowait"))
+
+ if (debug)
{
- wait = false;
+ if (arg.equals("--launcherprint"))
+ {
+ launcherprint = true;
+ }
+ else if (arg.equals("--launcherstop"))
+ {
+ launcherstop = true;
+ }
+ else if (arg.equals("--launcherwait"))
+ {
+ launcherwait = true;
+ }
+ else
+ // this ends the launcher immediately
+ if (arg.equals("--launchernowait"))
+ {
+ wait = false;
+ }
}
previousArg = arg;
// Don't add the --launcher... args to Jalview launch
arguments.add(arg);
}
}
- if (gui)
+ if (help)
+ {
+ // --help takes precedence over --gui
+ headless = true;
+ }
+ else if (gui)
{
// --gui takes precedence over --headless
headless = false;
}
+ else
+ {
+ // --output arguments assume headless mode
+ headless = assumeheadless;
+ }
final String appName = ChannelProperties.getProperty("app_name");
boolean dockIcon = false;
boolean dockName = false;
boolean headlessProp = false;
+ boolean macosHeadlessProp = false;
for (int i = 0; i < command.size(); i++)
{
String arg = command.get(i);
{
headlessProp = true;
}
+ else if (arg.startsWith("-D" + macosHeadlessProperty + "="))
+ {
+ macosHeadlessProp = true;
+ }
}
if (!memSet)
// -Xdock:name=... doesn't actually work :(
// Leaving it in in case it gets fixed
command.add("-Xdock:name=" + appName);
- // this launches WITHOUT an icon in the macOS dock. Could be useful for
- // getdown?
- // command.add("-Dapple.awt.UIElement=false");
// This also does not work for the dock
command.add("-Dcom.apple.mrj.application.apple.menu.about.name="
+ appName);
if (headless && !headlessProp)
{
System.setProperty(headlessProperty, "true");
- command.add("-D" + headlessProperty + "=true");
+ /* not setting this in java invocation of running jalview due to problem with Jmol */
+ if (help)
+ {
+ command.add("-D" + headlessProperty + "=true");
+ }
+ }
+ if (headless && LaunchUtils.isMac && !macosHeadlessProp)
+ {
+ System.setProperty(macosHeadlessProperty, "true");
+ command.add("-D" + macosHeadlessProperty + "=true");
}
String scalePropertyArg = HiDPISetting.getScalePropertyArg();