如何检测图形界面是否受支持?
我需要我的Java程序有两种显示模式:一个GUI界面和一个命令行界面。如果我在Windows,OS X或其他图形环境中运行它,我应该得到GUI界面,但是如果我通过SSH运行它,我应该得到命令行界面。如何检测图形界面是否受支持?
如何检测GUI是否可以显示,或者我应该使用命令行界面?
你实际上有两个问题:
1)检查,如果你在一个无头环境(没有图形)运行。检查这个方法:
if (GraphicsEnvironment.isHeadless()) {
// non gui mode
} else {
// gui mode
}
2)检查你正在运行的操作系统:
System.getProperty("os.name")
但是,第二个(2)问题将返回,即使你在一具无头环境中使用相同的名称。
为什么不创建两个类,一个用于命令行,一个用于GUI?再往下,你可能想要创建两个产品,然后你可以传递无头的,而不依赖于图形库。
这是我的想法,但是,不知道如何检测哪个正在运行。 Thnx – 2010-11-22 12:22:26
dacwe和vitaut都是对的。 我只是想添加一个建议。在设计应用程序时,应该使用MVC(模型 - 视图 - 控制器)模式。所以,如果它在UI模式下运行,它将使用UIView,否则使用ConsoleView。
Dacwe建议您如何自动决定使用哪种模式。由于Java是跨平台的语言,我认为这个名字是操作系统对你来说是无关紧要的。系统具有图形环境的事实更具相关性,因此请使用GraphicsEnvironment.isHeadless()
。
System.console()
将帮助您创建shell控制的应用程序。
我一直在寻找TE相同的解决方案,并提出了简单地用一个参数,所以当我从comandline的ARGS运行我的程序不同长度
if(args.length > 0) {
System.out.println("command line mode");
}
您也可以为btw应用程序指定参数。而且,您也可以在控制台中不带任何参数的情况下调用您的应用程序。 – 2015-05-15 03:51:27
刚一说明。 “isHeadless”小写字母L;让我搞砸了hehehe – 2010-11-22 12:51:27
@dacwe看起来问题中关于操作系统的部分只是对已经完成的研究的解释,而不是第二个问题。因此,我编辑了原始问题,因为它是噪音。我相信你应该编辑你的答案以反映澄清的问题。 – Vulcan 2015-02-23 11:28:15
这不是一个完全正确的答案,请参阅此处[问题](http://*.com/a/16611566/1584507) ** isHeadless **将返回意外的真实在某些情况下,这是不是你想要什么,当你在寻找是否有真正的屏幕或显示器。 – Indigo 2015-02-23 13:12:54