2009-08-10 3 views
0

Я просто хотел узнать, есть ли способ переключаться между консольным режимом и графическим режимом. Я использую java на качелях.Переключение между консольным режимом и графическим режимом

Я хотел бы узнать, могу ли я набрать что-то в оболочке, чтобы перейти в консольный режим, а затем набрать что-нибудь, чтобы вернуться на рабочий стол. Или, если я могу нажать какую-то клавишу во время загрузки или что-то в этом роде. Идея состоит в том, чтобы заставить мой сервер работать в консольном режиме, но иметь доступ к рабочему столу, когда я хочу облегчить выполнение моих задач.

ответ

4

Вы можете разделить проект на две части: сервер и графический интерфейс. Вы можете запустить свой сервер как службу (Windows) o daemon (Linux), и когда вы хотите использовать графический интерфейс, вам нужно запустить и работать с ним.

Это похоже приложение, как Mldonkey, Ettercap и т.д.

0

В программе вы можете определить команды, чтобы скрыть GUI. Что-то вроде gui.setVisible(false) должно сделать трюк, оно скрывает окно, на которое ссылается gui и все его элементы.

2

Вы можете передать параметры в командной строке и изучить их в main(String[] args). Они попадут в args. Таким образом, наиболее простым способом является проверка на наличие args.length > 0 && "-c".equals (args[0]), чтобы программа могла запускаться в консольном режиме и открывать пользовательский интерфейс в противном случае.

Другой вариант - написать два метода main() (в разных классах) и использовать правильный.

5

Вы можете использовать java.awt.GraphicsEnvironment.isHeadless() для проверки окружающей среды, где ваша программа работает поддерживает ГПИ или нет:

public static void main(String[] args){ 
    if (GraphicsEnvironment.isHeadless()){ 
     // Run console mode 
    } else { 
     // Start in GUI mode 
    } 
} 

Если бы я тебя, хотя, я бы сделал это из командной строки переключатель, так что вы можете используйте консольный режим в графических средах. Для максимального удобства, это будет не обязательный параметр, который по умолчанию какого-то вариант «авто», который использует isHeadless чек, как:

public static void main(String[] args){ 
    final List<String> arguments = Arrays.asList(args); 
    final int modeIndex = arguments.indexOf("-mode"); 
    final String mode = modeIndex == -1 ? "auto" : argument.get(modeIndex); 
    if ("auto".equals(mode)) runAuto(); 
    else if ("console".equals(mode)) runConsole(); 
    else if ("gui".equals(mode)) runGui(); 
    else System.err.println("Bad mode: " + mode); 
} 

private static void runGui(){ ... } 
private static void runConsole(){ ... } 
private static void runAuto(){ 
    if (GraphicsEnvironment.isHeadless()) runConsole(); 
    else runGui(); 
} 

(TODO: Добавить обработку ошибок, удалить магические строковые литералы, и т.д.)

Итак, начните программу с java YourMainClass или java YourMainClass -mode auto, и это делает образованное предположение, хотите ли вы GUI или консоль, используйте java YourMainClass -mode console, чтобы заставить режим консоли или java YourMainClass -mode gui заставить графический режим.

0

Вы можете создать команду командной строки, которая запустит мастер графического интерфейса, который позволит вам легко создавать компоненты/конфигурацию, которые вы хотите, а затем включить графический интерфейс для передачи сложной инструкции обратно в один поток приложений. Полезно ли, чтобы компонент GUI был уничтожен после того, как вы его использовали, или просто скрытый, - это решение, которое вам нужно будет сделать, относительно того, как часто вы будете использовать компонент GUI.