此 Java 教程适用于 JDK 8。本页中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关 Java SE 9 及后续版本中更新的语言特性的摘要,请参阅Java 语言变化。
有关所有 JDK 发行版中的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK 发行说明。
BufferStrategy
在Java 2标准版中,您无需担心视频指针或视频内存,即可充分利用双缓冲或翻页技术。新添加了一个名为java.awt.image.BufferStrategy的类,方便处理对表面和组件的绘制,无论使用多少个缓冲区或使用何种技术来显示它们。
缓冲策略提供了两个多用途绘图方法:getDrawGraphics和show。当您要开始绘制时,获取一个绘图对象并使用它。当您完成绘制并希望将信息呈现到屏幕上时,调用show。这两个方法被设计得相当优雅,可以很好地适应渲染循环:
BufferStrategy myStrategy; while (!done) { Graphics g = myStrategy.getDrawGraphics(); render(g); g.dispose(); myStrategy.show(); }
缓冲策略还被设置为帮助您监视VolatileImage问题。在全屏独占模式下,VolatileImage问题尤其重要,因为窗口系统有时会夺回它给予您的视频内存。一个重要的例子是当用户在Windows中按下ALT+TAB组合键时,突然您的全屏程序在后台运行,您的视频内存丢失了。您可以调用contentsLost方法来查看是否发生了这种情况。同样,当窗口系统返回您的内存时,您可以使用contentsRestored方法来了解。
BufferCapabilities
如前所述,不同的操作系统,甚至是同一操作系统上的不同图形卡,都具有不同的可用技术。这些能力对您进行公开,以便您可以为您的应用程序选择最佳技术。
类java.awt.BufferCapabilities封装了这些能力。每个缓冲策略都由其缓冲能力控制,因此为您的应用程序选择正确的能力非常关键。要了解可用的能力,请从您的图形设备上可用的GraphicsConfiguration对象调用getBufferCapabilities方法。
在Java 2标准版1.4中可用的能力有:
isPageFlipping
isFullScreenRequired
isMultiBufferAvailable
getFlipContents
FlipContents.COPIED
FlipContents.BACKGROUND
FlipContents.PRIOR
FlipContents.UNKNOWN
要为组件创建缓冲策略,请调用createBufferStrategy方法,并提供所需缓冲区的数量(此数量包括主表面)。如果需要特定的缓冲技术,请提供适当的BufferCapabilities对象。请注意,当您使用此版本的方法时,必须捕获AWTException,以防您选择的选项不可用。还请注意,这些方法仅适用于Canvas和Window。
创建了组件的特定缓冲策略后,可以使用getBufferStrategy方法进行操作。请注意,此方法仅适用于画布和窗口。
关于使用缓冲功能和缓冲策略的一些提示:
BufferStrategy myStrategy; while (!done) { Graphics g; try { g = myStrategy.getDrawGraphics(); render(g); } finally { g.dispose(); } myStrategy.show(); }