【问题标题】:How to detect if a graphical interface is supported?如何检测是否支持图形界面?
【发布时间】:2011-05-13 19:28:38
【问题描述】:

我需要我的 Java 程序有两种显示模式:GUI 界面和命令行界面。如果我在 Windows、OS X 或其他图形环境中运行它,我应该得到 GUI 界面,但如果我通过 SSH 运行它,我应该得到命令行界面。

如何检测是否可以显示 GUI,或者是否应该使用命令行界面?

【问题讨论】:

    标签: java user-interface command-line


    【解决方案1】:

    您实际上有两个问题:

    1) 检查您是否在无头环境中运行(无图形)。检查这个方法:

    if (GraphicsEnvironment.isHeadless()) {
         // non gui mode
    } else {
         // gui mode
    }
    

    2) 检查您在哪个操作系统下运行:

    System.getProperty("os.name")
    

    但是,即使您在无头环境中操作,第二 (2) 个问题也会返回相同的名称。

    【讨论】:

    • @dacwe 问题中关于操作系统的部分似乎只是对所做研究的解释,而不是第二个问题。因此,我编辑了原始问题,因为它是噪音。我认为您应该编辑您的答案以反映已澄清的问题。
    • 这不是一个完全正确的答案,请参考这个question here isHeadless 在某些情况下会返回意想不到的真,这不是你想要的,当你正在寻找如果真的有可用的屏幕或显示器。
    • 有没有办法从命令行检查这个属性?
    【解决方案2】:

    dacwe 和 vitaut 都是对的。 我只是想添加一个建议。在设计应用程序时,您应该使用 MVC(模型-视图-控制器)模式。因此,如果它在 UI 模式下运行,它使用 UIView,否则使用 ConsoleView。

    Dacwe 建议您如何自动决定使用哪种模式。由于 Java 是跨平台语言,我认为操作系统的名称与您无关。系统有图形环境这一点比较重要,所以使用GraphicsEnvironment.isHeadless()

    System.console() 将帮助您创建外壳控制的应用程序。

    【讨论】:

      【解决方案3】:

      我建议添加一个命令行选项来确定是使用命令行还是图形用户界面,因为即使在 GUI 可用的环境中,用户也可能希望使用命令行界面。

      您还可以使用System.console() 检查控制台设备是否可用。

      【讨论】:

        【解决方案4】:

        为什么不创建两个类,一个用于命令行,一个用于 GUI?再往下,您可能想要创建两个产品,然后您可以交付无头的产品,而不依赖于图形库。

        【讨论】:

          【解决方案5】:

          我一直在寻找相同的解决方案并想出了简单地使用一个参数,所以当我从命令行运行我的程序时,args 的长度不同

          if(args.length > 0) {
              System.out.println("command line mode");
          }
          

          【讨论】:

          • 您也可以为窗口应用程序指定参数,顺便说一句。而且,您也可以从控制台调用不带参数的应用程序。
          猜你喜欢
          • 1970-01-01
          • 2020-06-01
          • 2016-01-27
          • 1970-01-01
          • 1970-01-01
          • 2019-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多