sclass AutoVMExit extends TimerTask { static boolean installed; static boolean disabled; int lastObjectCount = -1; static java.util.Timer timer; static int firstDelay = 30000; static int delay = 5000; public static void install() { if (!installed) { installed = true; if (!disabled) { timer = new java.util.Timer("AutoVMExit"); timer.scheduleAtFixedRate(new AutoVMExit(), firstDelay, delay); } } } /** Looks for objects that give us a reason to keep the VM alive. * Right now we count windows, tray icons and JavaFX stages. */ public void run() { if (isHiddenVM()) ret; int objectCount = autoVMExit_visibleObjects(); //System.out.println("Windows: " + objectCount); if (objectCount == 0 && lastObjectCount == 0) { System.out.println("AutoVMExit: No windows open or tray icons installed - exiting"); cleanKillVM(); //System.exit(0); } lastObjectCount = objectCount; } public static void disable() { disabled = true; if (timer != null) timer.cancel(); } public static int getFirstDelay() { return firstDelay; } public static void setFirstDelay(int firstDelay) { AutoVMExit.firstDelay = firstDelay; } public static int getDelay() { return delay; } public static void setDelay(int delay) { AutoVMExit.delay = delay; } }