【发布时间】:2011-05-13 19:28:38
【问题描述】:
我需要我的 Java 程序有两种显示模式:GUI 界面和命令行界面。如果我在 Windows、OS X 或其他图形环境中运行它,我应该得到 GUI 界面,但如果我通过 SSH 运行它,我应该得到命令行界面。
如何检测是否可以显示 GUI,或者是否应该使用命令行界面?
【问题讨论】:
标签: java user-interface command-line
我需要我的 Java 程序有两种显示模式:GUI 界面和命令行界面。如果我在 Windows、OS X 或其他图形环境中运行它,我应该得到 GUI 界面,但如果我通过 SSH 运行它,我应该得到命令行界面。
如何检测是否可以显示 GUI,或者是否应该使用命令行界面?
【问题讨论】:
标签: java user-interface command-line
您实际上有两个问题:
1) 检查您是否在无头环境中运行(无图形)。检查这个方法:
if (GraphicsEnvironment.isHeadless()) {
// non gui mode
} else {
// gui mode
}
2) 检查您在哪个操作系统下运行:
System.getProperty("os.name")
但是,即使您在无头环境中操作,第二 (2) 个问题也会返回相同的名称。
【讨论】:
dacwe 和 vitaut 都是对的。 我只是想添加一个建议。在设计应用程序时,您应该使用 MVC(模型-视图-控制器)模式。因此,如果它在 UI 模式下运行,它使用 UIView,否则使用 ConsoleView。
Dacwe 建议您如何自动决定使用哪种模式。由于 Java 是跨平台语言,我认为操作系统的名称与您无关。系统有图形环境这一点比较重要,所以使用GraphicsEnvironment.isHeadless()。
System.console() 将帮助您创建外壳控制的应用程序。
【讨论】:
我建议添加一个命令行选项来确定是使用命令行还是图形用户界面,因为即使在 GUI 可用的环境中,用户也可能希望使用命令行界面。
您还可以使用System.console() 检查控制台设备是否可用。
【讨论】:
为什么不创建两个类,一个用于命令行,一个用于 GUI?再往下,您可能想要创建两个产品,然后您可以交付无头的产品,而不依赖于图形库。
【讨论】:
我一直在寻找相同的解决方案并想出了简单地使用一个参数,所以当我从命令行运行我的程序时,args 的长度不同
if(args.length > 0) {
System.out.println("command line mode");
}
【讨论】: