如何检测是否支持图形界面?

时间:2010-11-22 12:02:19

标签: java user-interface command-line

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

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

5 个答案:

答案 0 :(得分:31)

你实际上有两个问题:

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

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

2)检查您正在运行的操作系统:

System.getProperty("os.name")

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

答案 1 :(得分:4)

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

Dacwe建议您如何自动决定使用哪种模式。由于Java是跨平台语言,我认为操作系统的名称与您无关。系统具有图形环境的事实更具相关性,因此请使用GraphicsEnvironment.isHeadless()

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

为什么不创建两个类,一个用于命令行,一个用于GUI?更进一步,您可能想要创建两个产品,然后您可以将无头的产品交付给图形库。

答案 4 :(得分:-3)

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

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