Определить, было ли приложение запущено через Java или Javaw?

У меня есть программа с графическим интерфейсом, которая выполняется по умолчанию через javaw.exe используя стартовую оболочку, созданную с помощью Launch4j.

Эту программу также можно запустить из командной строки, а затем распечатать вывод на консоль.

Как я могу определить, видна ли консоль, и, следовательно, выводить текст через System.out.println() виден?

Насколько я понимаю, это зависит от того, была ли программа запущена через Javaw / Wrapper или напрямую java -jar myprog.jar, Есть ли способ отличить оба метода запуска от программы?

2 ответа

Решение

Если System.console() возвращается nullконсоли нет, что происходит при запуске программы с javaw вместо java, Пример:

import javax.swing.JOptionPane;

public class Example {
    public static void main(String[] args) {
        if (System.console() != null) {
            System.out.println("Hello on the console");
        } else {
            JOptionPane.showMessageDialog(null, "Hello, there's no console");
        }
    }
}

Попробуйте скомпилировать это, а затем начать с java Example или же javaw Example,

$0 - программа, которая запустила последний cmd - в оболочке.

Другие вопросы по тегам