当前位置: 首页 > 面试题库 >

如何确定GraphicsEnvironment是否存在

司空福
2023-03-14
问题内容

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

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

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

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

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

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

提前致谢。


问题答案:

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;
        }
    }

}


 类似资料:
  • 问题内容: 在JMS中,很容易找出连接是否丢失,是否发生异常。但是,如何确定连接是否再次存在? 场景:我使用JMS与服务器通信。现在我的连接断开了(服务器已关闭),这导致了异常。到目前为止,一切都很好。如果服务器再次启动并重新建立连接,我怎么知道? 我看不到任何可以提供此类信息的侦听器。 问题答案: 啊…旧的异常处理/重新连接难题。 有些传输提供程序将为您自动重新连接您的应用程序,而另一些传输提供

  • 我编写了以下代码来检测目录是否存在。方法接受完全限定路径或相对路径。 注意:返回指定目录或文件名的完全限定路径。在我的例子中,这是。 这个代码已经运行了好几个月了。但它突然停止了工作。现在,当目录不存在时,中不会出现异常只返回一个空字符串。 我发布了一个类似的问题,有人建议我应该总是在路径的末尾追加。我试过了,以为我有一次例外,但现在没有例外。 我不知道与我通信的FTP服务器上的行为是否发生了变化

  • 问题内容: 由于ResultSet包含从动态SQL返回的数据,是否有任何方法可以确定ResultSet是否包含特定的列名?例如,如果我运行但Column_ABC确实不存在,它将抛出异常。如何测试ResultSet是否可以从名为“ Column_ABC”的列中获取数据? 问题答案: 使用该类。 我不明白的是为什么会需要此功能。正在执行的查询或存储过程应具有已知结果。查询的列应该是已知的。需要这样的功

  • 问题内容: 我需要使用AWS开发工具包检查文件是否存在。这是我在做什么: 它可以工作,但问题是当对象不存在时,回调(带有参数err和url)不会返回错误,并且当我尝试访问URL时,它会显示“ NoSuchObject”。 当对象不存在时,该方法是否应该返回错误对象?如何确定对象是否存在?我真的需要打电话给返回的URL吗? 问题答案: 在创建签名的URL之前,您需要检查文件是否直接从存储桶中存在。一

  • 问题内容: 我有一个Python字典,例如: 我想检查一个键是否在字典中。我很想知道以下两种情况中哪一种更为可取,为什么? 问题答案: if ‘name’ in mydict: 是首选的pythonic版本。不鼓励使用,并且在Python 3中已删除 此方法。

  • 我需要检查堆栈中是否有重复项(仅在基本方法pop、push、top、isempty中使用),如果堆栈没有重复项,则返回true;如果堆栈为空,则返回true;如果堆栈有重复项,则返回false 如果不使用另一个函数和最短路径,我如何做到这一点?解决方案需要使用基本方法,而不使用c的内置函数#