在控制台模式和图形模式之间切换

时间:2009-08-10 10:37:29

标签: java user-interface swing command-line-interface

我只是想知道是否有某种方法可以在控制台模式和图形模式之间切换。我正在使用Java。

我想知道我是否可以在shell中键入内容以进入控制台模式,然后键入内容以返回桌面。或者,如果我可以在启动时按某个键,或者其他什么。 我的想法是让我的服务器在控制台模式下运行,但是当我想要更轻松地完成任务时,可以使用桌面。

5 个答案:

答案 0 :(得分:5)

您可以使用java.awt.GraphicsEnvironment.isHeadless()检查运行程序的环境是否支持GUI:

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 YourMainClassjava YourMainClass -mode auto启动您的程序,它会让您有理由猜测您是想要GUI还是控制台,使用java YourMainClass -mode console强制使用控制台模式,或java YourMainClass -mode gui强制GUI模式。

答案 1 :(得分:4)

您可以将项目分成两部分:服务器和GUI。您可以将服务器作为服务(Windows)或守护程序(Linux)运行,当您需要GUI时,您必须启动并使用它。

就像MlDonkey,Ettercap等应用程序一样。

答案 2 :(得分:2)

您可以在命令行上传递参数并在main(String[] args)中检查它们。他们最终会进入args。因此,最简单的方法是检查args.length > 0 && "-c".equals (args[0])以告诉程序在控制台模式下运行并以其他方式打开UI。

另一种选择是编写两个main()方法(在不同的类中)并使用正确的方法。

答案 3 :(得分:0)

在程序中,您可以定义隐藏GUI的命令。像gui.setVisible(false)这样的东西可以做到这一点,它隐藏了gui及其所有元素引用的窗口。

答案 4 :(得分:0)

您可以创建一个命令行命令来启动GUI向导,使您可以轻松创建所需的组件/配置,然后启用GUI以将复杂的指令传递回单个应用程序线程。在您使用GUI组件之后将GUI组件销毁,或者只是隐藏它是否有用是您必须做出的决定,关于您使用GUI组件的频率。