如何确定GraphicsEnvironment是否存在

我有一个需要用户输入密码的应用程序。

我想要做的是从控制台读取密码(如果操作系统支持unix)或显示JOptionPane并要求用户输入密码(如果操作系统支持图形界面(例如Windows))。

有人可能会争辩说,在上述两种情况下控制台始终可用,因此控制台输入就足够了。但是问题是,如果Java应用程序开始使用javaw.exe,则控制台不可用。因此,我需要一种方法来确定我是否可以做任何一种情况。

我的问题是如何确定应用程序从中运行的环境是否支持控制台或图形界面。

我知道存在一个静态方法, GraphicsEnvironment.isHeadless()

但是从Java文档来看,我认为该方法无法区分操作系统是否支持图形,而不是操作系统是否可以支持I / O设备(键盘,鼠标,屏幕)之一。

有谁知道更多吗?我是否可以检索操作系统是否支持控制台或图形环境?

提前致谢。

回答:

GraphicsEnvironment.isHeadless()true在以下情况下返回:

  • 系统属性java.awt.headless已设置为true
  • 您正在Unix / Linux系统上运行,并且没有DISPLAY设置环境变量

这是用于检索无头属性的代码:

    String nm = System.getProperty("java.awt.headless");

if (nm == null) {

/* No need to ask for DISPLAY when run in a browser */

if (System.getProperty("javaplugin.version") != null) {

headless = defaultHeadless = Boolean.FALSE;

} else {

String osName = System.getProperty("os.name");

headless = defaultHeadless =

Boolean.valueOf(("Linux".equals(osName) || "SunOS".equals(osName)) &&

(System.getenv("DISPLAY") == null));

}

} else if (nm.equals("true")) {

headless = Boolean.TRUE;

} else {

headless = Boolean.FALSE;

}

如果您想知道是否有任何可用的屏幕,可以调用GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(),返回所有可用的屏幕。

import java.awt.GraphicsDevice;

import java.awt.GraphicsEnvironment;

import java.awt.HeadlessException;

public class TestHeadless {

private static boolean isReallyHeadless() {

if (GraphicsEnvironment.isHeadless()) {

return true;

}

try {

GraphicsDevice[] screenDevices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();

return screenDevices == null || screenDevices.length == 0;

} catch (HeadlessException e) {

e.printStackTrace();

return true;

}

}

}

以上是 如何确定GraphicsEnvironment是否存在 的全部内容, 来源链接: utcz.com/qa/414570.html

回到顶部