2010-11-22 75 views
20

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

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

回答

26

你实际上有两个问题:

1)检查,如果你在一个无头环境(没有图形)运行。检查这个方法:

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

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

System.getProperty("os.name") 

但是,第二个(2)问题将返回,即使你在一具无头环境中使用相同的名称。

+1

刚一说明。 “isHeadless”小写字母L;让我搞砸了hehehe – 2010-11-22 12:51:27

+0

@dacwe看起来问题中关于操作系统的部分只是对已经完成的研究的解释,而不是第二个问题。因此,我编辑了原始问题,因为它是噪音。我相信你应该编辑你的答案以反映澄清的问题。 – Vulcan 2015-02-23 11:28:15

+0

这不是一个完全正确的答案,请参阅此处[问题](http://stackoverflow.com/a/16611566/1584507) ** isHeadless **将返回意外的真实在某些情况下,这是不是你想要什么,当你在寻找是否有真正的屏幕或显示器。 – Indigo 2015-02-23 13:12:54

2

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

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

2

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

+1

这是我的想法,但是,不知道如何检测哪个正在运行。 Thnx – 2010-11-22 12:22:26

3

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

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

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

-2

我一直在寻找TE相同的解决方案,并提出了简单地用一个参数,所以当我从comandline的ARGS运行我的程序不同长度

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

您也可以为btw应用程序指定参数。而且,您也可以在控制台中不带任何参数的情况下调用您的应用程序。 – 2015-05-15 03:51:27