我需要我的Java程序有两种显示模式:GUI界面和命令行界面。如果我在Windows,OS X或其他图形环境中运行它,我应该获得GUI界面,但如果我通过SSH运行它,我应该得到命令行界面。
如何检测是否可以显示GUI或是否应该使用命令行界面?
答案 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");
}