--- old/src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java 2014-02-13 14:44:22.000000000 +0400 +++ new/src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java 2014-02-13 14:44:21.000000000 +0400 @@ -31,6 +31,11 @@ import javax.swing.plaf.UIResource; import javax.swing.Painter; import java.awt.print.PrinterGraphics; +import sun.awt.image.BufferedImageGraphicsConfig; +import sun.awt.image.OffScreenImage; +import sun.awt.image.SunVolatileImage; +import sun.java2d.SunGraphics2D; +import sun.swing.JLightweightFrame; /** * Convenient base class for defining Painter instances for rendering a @@ -674,7 +679,7 @@ ImageCache imageCache = ImageCache.getInstance(); //get the buffer for this component VolatileImage buffer = (VolatileImage) imageCache.getImage(config, w, h, this, extendedCacheKeys); - + int renderCounter = 0; //to avoid any potential, though unlikely, infinite loop do { //validate the buffer so we can check for surface loss @@ -693,10 +698,15 @@ if (buffer != null) { buffer.flush(); buffer = null; - } + } //recreate the buffer - buffer = config.createCompatibleVolatileImage(w, h, - Transparency.TRANSLUCENT); + if (config instanceof OffScreenImage.GraphicsConfig) { + buffer = new OffScreenImage. + VolatileImage((OffScreenImage.GraphicsConfig)config, + w, h, Transparency.TRANSLUCENT); + } else { + buffer = config.createCompatibleVolatileImage(w, h, Transparency.TRANSLUCENT); + } // put in cache for future imageCache.setImage(buffer, config, w, h, this, extendedCacheKeys); }