# 全屏独家模式 > 原文: [https://docs.oracle.com/javase/tutorial/extra/fullscreen/exclusivemode.html](https://docs.oracle.com/javase/tutorial/extra/fullscreen/exclusivemode.html) 使用 Microsoft DirectX API 的程序员可能已经熟悉全屏独占模式。其他程序员可能对这个概念有些新意。在任何一种情况下,全屏独占模式都是 J2SE™1.4 版的强大功能,它允许程序员暂停窗口系统,以便可以直接在屏幕上完成绘图。 这在很多方面都与通常的 GUI 程序略有不同。在传统的 Java GUI 程序中,AWT 负责从操作系统,*事件调度线程*传播*绘制事件*,并调用 AWT 的`Component.paint`方法适当时。在全屏独家应用中,绘画通常由程序本身主动完成。另外,传统的 GUI 应用程序仅限于用户选择的屏幕的位深度和大小。在全屏独占应用程序中,程序可以控制屏幕的位深度和大小(*显示模式*)。最后,许多更先进的技术,例如*页面翻转*(下面讨论)和立体缓冲(利用为每只眼睛使用一组独立帧的系统)在某些平台上需要应用程序首先进入全屏独家模式。 ## 硬件加速图像基础 要了解全屏独占模式 API,您需要了解硬件加速图像的一些基本原理。 `VolatileImage`接口封装了可能会或可能不会利用硬件加速的表面。这些表面可能在操作系统的命令下失去其硬件加速或其内存(因此,名称为“volatile”)。有关易失性图像的更多信息,请参见`VolatileImage` _ 教程*(即将推出)。 全屏独占模式通过`java.awt.GraphicsDevice`对象处理。有关所有可用屏幕图形设备的列表(在单监视器系统或多监视器系统中),您可以在本地`java.awt.GraphicsEnvironment`上调用方法`getScreenDevices` ;对于默认(主)屏幕(单监视器系统上的唯一屏幕),您可以调用方法`getDefaultScreenDevice` 。 拥有图形设备后,可以调用以下方法之一: * `public boolean isFullScreenSupported()` 此方法返回是否可以使用全屏独占模式。在没有全屏独占模式的系统上,最好以固定大小的窗口模式运行应用程序,而不是设置全屏窗口。 * `public void setFullScreenWindow(Window w)` 给定一个窗口,此方法使用该窗口进入全屏独占模式。如果没有全屏独占模式,则窗口位于(0,0)并调整大小以适合屏幕。将此方法与`null`参数一起使用可退出全屏独占模式。 ## 编程技巧 以下是有关使用全屏独占模式进行编程的一些提示: * 在进入全屏独占模式之前,请检查`isFullScreenSupported` 。如果不支持,性能可能会降低。 * 使用`try ... finally`子句时,进入和退出全屏模式更加强大。这不仅是良好的编码实践,而且还会阻止您的程序保持全屏独占模式的时间长于它应该: ```java GraphicsDevice myDevice; Window myWindow; try { myDevice.setFullScreenWindow(myWindow); ... } finally { myDevice.setFullScreenWindow(null); } ``` * 大多数全屏独家应用程序更适合使用未装饰的窗户。使用`setUndecorated`方法关闭框架或对话框中的装饰。 * 全屏独占应用程序不应调整大小,因为调整全屏应用程序的大小可能会导致不可预测(或可能危险)的行为。 * 出于安全原因,在 applet 中使用全屏独占模式时,用户必须授予`fullScreenExclusive`权限。