JDK-8067266 : Print job fails with Cocoa AWT error
  • Type: Bug
  • Component: client-libs
  • Sub-Component: 2d
  • Affected Version: 8u11
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: os_x
  • CPU: x86
  • Submitted: 2014-08-01
  • Updated: 2014-12-11
  • Resolved: 2014-08-08
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
jdk 1.8.0_11

ADDITIONAL OS VERSION INFORMATION :
Mac OS 10.9 Mavericks

EXTRA RELEVANT SYSTEM CONFIGURATION :
Java 8 was installed
Running from a bundled Mac Application (bundled with appbundler.jar)

A DESCRIPTION OF THE PROBLEM :
I want to print out a picture from a local file to a local printer. The below test case runs fine on previous releases of Mac OS X Port of Java, for instance Java 7 from the 10.8 Mac OS.


REGRESSION.  Last worked in version 8u11

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Trying to print from buffered graphics, like a picture got from a local file.

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The printjob is supposed to print one page with the picture on it.
ACTUAL -
The program crashes with a JVM Fatal error detailed below.
It turns out that the AWT thread was not invoked by the CPrinter job.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
FATAL ERROR in native method: Using JNIEnv in the wrong thread
2014-07-22 19:31:22.089 java[2306:a643] Cocoa AWT: Not running on AppKit thread 0 when expected. (
    0   libosxapp.dylib                     0x00000001205c1782 +[ThreadUtilities getJNIEnv] + 38
    1   libawt_lwawt.dylib                  0x0000000120e35567 syncFromJavaPixels + 1842
    2   libawt_lwawt.dylib                  0x0000000120e359fb LockImage + 75
    3   libawt_lwawt.dylib                  0x0000000120e48127 Java_sun_java2d_CRenderer_doImage + 170
    at sun.java2d.CRenderer.doImage(Native Method)
    at sun.java2d.OSXSurfaceData.blitImage(OSXSurfaceData.java:1027)
    4   ???                                 0x0000000109a2ab9e 0x0 + 4456623006
    5   ???                                 0x0000000109a16360 0x0 + 4456538976
)
    - locked <0x000000079adebdd0> (a java.lang.Object)
2014-07-22 19:31:22.089 java[2306:a643]     Please file a bug report at http://java.net/jira/browse/MACOSX_PORT with this message and a reproducible test case.
    at sun.java2d.CRenderer.blitImage(CRenderer.java:461)
    at sun.java2d.CRenderer.copyImage(CRenderer.java:474)
    at sun.java2d.CRenderer.copyImage(CRenderer.java:533)
    at sun.java2d.pipe.ValidatePipe.copyImage(ValidatePipe.java:186)
    at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3194)
    at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3321)
    at sun.java2d.SunGraphics2D.drawRenderedImage(SunGraphics2D.java:2627)
    at sun.print.ProxyGraphics2D.drawRenderedImage(ProxyGraphics2D.java:1202)
    at net.sf.jiga.xtended.impl.Sprite.__draw0(Sprite.java:1913)
    at net.sf.jiga.xtended.impl.Sprite.__draw(Sprite.java:1828)
    - locked <0x0000000796dd2630> (a net.sf.jiga.xtended.kernel.Monitor)
    - locked <0x0000000796dd25c0> (a net.sf.jiga.xtended.kernel.Monitor)
    at net.sf.jiga.xtended.impl.Sprite.draw(Sprite.java:3488)
    at jxa.IMCBrowser$48$2.print(IMCBrowser.java:4063)
    at sun.lwawt.macosx.CPrinterJob$4.run(CPrinterJob.java:634)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
    at sun.lwawt.macosx.CPrinterJob.print(CPrinterJob.java:287)
    at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1323)
    at jxa.IMCBrowser$48.actionPerformed(IMCBrowser.java:4080)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
    at com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:157)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
    at java.awt.Component.processMouseEvent(Component.java:6527)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6292)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4883)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4705)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4705)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Java Result: 134

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
 Printable printable = new Printable() {
                                    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
                                        if (pageIndex > 0) {
                                            return Printable.NO_SUCH_PAGE;
                                        }
              
/* draw some picture */
                                        BufferedImage img = ImageIO.read(new File("graphic.png"));
                                        Rectangle paperBounds = new Rectangle((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY(), (int) pageFormat.getImageableWidth(), (int) pageFormat.getImageableHeight());
                                         double scaleFitPaper = Math.max(paperBounds.getWidth() / (double) sp.getWidth(), paperBounds.getHeight() / (double) sp.getHeight());
                                        g.translate(Math.round((float) paperBounds.getCenterX() - img.getWidth() / 2f),
                                        Math.round((float) paperBounds.getCenterY() - img.getHeight() / 2f));
                                        int scaleX = (int) (img.getWidth() * scaleFitPaper);
                                        int scaleY = (int) (img.getHeight() * scaleFitPaper);
                                        Image image = img.getScaledInstance(scaleX,  scaleY, Image.SCALE_SMOOTH);
                                        BufferedImage picture = new BufferedImage(scaleX, scaleY, TYPE);
                                        picture.getGraphics().drawImage(image, 0, 0 , null);
                                        Graphics2D g = (Graphics2D)graphics;
                                        g.drawRenderedImage(picture, null);
                                        g.dispose();
                                        return Printable.PAGE_EXISTS;
                                    }
                                };
                                jobs.add(printable);
                            }
                        }
                    }
/* print */
                            pj.setPrintable(job, pjFormat);
                            pj.print();
---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
None found yet.