0

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

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

4

5 回答 5

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 YourMainClass因此,使用or启动您的程序,java YourMainClass -mode auto它会做出有根据的猜测,您是否需要 GUI 或控制台,用于java YourMainClass -mode console强制控制台模式或java YourMainClass -mode gui强制 GUI 模式。

于 2009-08-10T11:12:35.113 回答
4

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

它就像 MlDonkey、Ettercap等应用程序。

于 2009-08-10T10:42:18.857 回答
2

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

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

于 2009-08-10T10:55:26.520 回答
0

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

于 2009-08-10T13:20:46.157 回答
0

在程序中,您可以定义隐藏 GUI 的命令。类似的东西gui.setVisible(false)应该可以解决问题,它隐藏了 gui 引​​用的窗口及其所有元素。

于 2009-08-10T10:49:45.487 回答