Hi Phil, All,

Bug: https://bugs.openjdk.java.net/browse/JDK-8066139
webrev: http://cr.openjdk.java.net/~psadhukhan/8066139/webrev.00/

It was seen after fix of JDK-8061267 <https://bugs.openjdk.java.net/browse/JDK-8061267>: PrinterJob: Specified Page Ranges not displayed in Windows Native Print Dialog the closed/java/awt/PrintJob/HighResTest/HighResTest.java was failing with NPE when PrinterJob.getGraphics() is called the 2nd time before calling PrinterJob.end().

The above fix caused this regression because it sets the PD_PAGENUMS flag for windows PrintDlg struct which causes *Pages* radio button to be selected in print dialog. However, fromPage and toPage was both set to 1 so after the 1st page is printed, RasterPrinterJob.print(attributes) finishes and graphicsToBeDrawn.closeWhenEmpty() gets called
http://hg.openjdk.java.net/jdk9/client/jdk/file/d8def65c6c00/src/java.desktop/share/classes/sun/print/PrintJob2D.java#l1006

which sets the queue to null so when PrinterJob2D#getGraphics() calls graphicsToBeDrawn.pop() it sees queue to be null and sets graphics object to be null so PrinterJob.getGraphics() gets null and g.drawLine in testcase causes NPE since g is null.

Fix was done to set the PD_PAGENUMS flag only when toPage is more than fromPage in which case, "All" will be selected in printer dialog and RasterPrinterJob.print() will finish only after printing all the pages.

Regards
Prasanta

Reply via email to