当前位置: 首页 > 工具软件 > Headless > 使用案例 >

Headless模式是在缺少显示屏

贺景铄
2023-12-01

  Headless模式是在缺少显示屏、键盘或者鼠标时的系统配置。听起来不可思议,但事实上你可以在这中模式下完成不同的操作,甚至是用图形数据也可以。

  哪里才能用到此模式呢?想想你的应用不停的生成一张图片,比如,当用户每次登陆系统是都要生成一张认证图片。当创建图片时,你得应用既不需要显示器也不需要键盘。让我们假设一下,现在你的应用有个主架构或者专有服务器,但这个服务没有显示器,键盘或者鼠标。理想的决定是用环境的大量视觉计算能力而不是非视觉特性。在Headless模式下生成的图片可以传递到Headful系统进行更深层次渲染。

  在java.awt.toolkit和java.awt.graphicsenvironment 类中有许多方法,除了对字体,图像和打印的操作外还有调用显示器,键盘和鼠标的方法。但是有一些类中,比如Canvas 和 Panel,可以在headless模式下执行。在J2SE 1.4平台之后就提供了对Headless模式的支持。

  注:这篇文章重点讲的是Java SE6 平台版本的文档。任何API的增加或其他增强Java SE平台的规范是由JSR270专家组(JSR 270 Expert Group.)的审查和批准。

  Toolkit

  java.awt.Toolkit类是Abstract Window Toolkit (AWT)的 所有实现类的抽象父类。Toolkit的子类用于把各种AWT组件绑定到特定的本地toolkit实现上去。

  如果显示设备,键盘或鼠标不支持的话,很多组件都会受影响。一个合适的类构造器应当抛出一个HeadlessException异常:

  这种重量级的组件需要有一个操作系统级别上对等的图形函数来支持它,在headless的机器上它们将不能正常工作。

  与Canvas、Panel和Image组件相关的组件不需要抛出HeadlessException异常,因为这些组件在操作系统级别上的对等图形函数可以使用空函数,然后作为轻量级组件来处理。

  一个Headless的toolkit也会把Java组件绑定到本地资源上去,但是它只有在资源中不包含显示设备或输入设备时才会这样做。

  Graphics Environment

  java.awt.GraphicsEnvironment类是一个抽象类,它描述了在给定平台中,可以在Java技术中使用的由 GraphicsDevice对象和Font对象组成的集合。该GraphicsEnvironment中的资源可以是本地的也可以是远程设备。 GraphicsDevice对象可以是显示器,打印机或者图形缓存等,并且它们是Graphics2D 绘制函数的目标。每一个GraphicsDevice都有许多与之关联的GraphicsConfiguration对象。这些对象指定了不同的配置环境,在这些配置环境中可以使用GraphicsDevice。

  Table 1 显示GraphicsEnvironment 方法,检查Headless模式支持

  Table 1. Headless 模式方法

  方法描述

  public static boolean

  isHeadless()测试环境是否为headless, 对于是否不支持display device,keyboard,mouse。如果这个方法returns true,theToolkitandGraphicsEnvironmentclasses 抛出(thrown)依赖于display device, keyboard, mouse的aHeadlessExceptionis异常.

  public boolean

  isHeadlessInstance()Returns thisGraphicsEnvironmentcan 是否支持dieplay device,keyboard,mouse. 如果这个方法 returns true, theGraphicsEnvironmentthat 抛出(throw)一个依赖于 display device, keyboard, mouseaHeadlessExceptionis 异常.

  注意:isHeadless()方法检查特定的系统属性,java.awt.headless而不是系统的硬件配置.

  HeadlessException 抛出的代码,这取决于display device、keyboard、mouse在一个环境称为不支持任何这些.唯一的例外是来自一个 UnsupportedOperationException,本身就是来源于一个RuntimeException.

  设置Headless模式

  使用Headless模式操作,您必须首先了解如何检查和设置系统属性与此相关的模式。此外,你必须了解如何创建一个默认的工具包使用工具箱的无头实现类.

 类似资料: