[OpenJDK 2D-Dev] [9] RFR: JDK-8066139, , Null return from PrintJob.getGraphics() running closed/java/awt/PrintJob/HighResTest/HighResTest.java
prasanta sadhukhan
prasanta.sadhukhan at oracle.com
Tue Mar 1 11:14:57 UTC 2016
Hi Phil,
Please find an updated webrev:
http://cr.openjdk.java.net/~psadhukhan/8066139/webrev.01/
It seems if printerJobThread finished printing, it will set
graphicsToBeDrawn/graphicsDrawn ArrayList to null resulting in
getGraphics() returning null in the 2nd iteration causing NPE so
I have modified printerJobThread#run so that when it has finished
printing, do not set the arrayList to null but set a flag. In
getGraphics(), I check that flag and start a new printerJobThread to
handle the next printing.
I have tested "All" and "Pages" selection.
Regards
Prasanta
On 2/22/2016 1:35 PM, Philip Race wrote:
> > It seems this behaviour is same in linux too for this HighResTest
> testcase.
>
> OK that is good information .. so is not really a regression from
> 8061267 <https://bugs.openjdk.java.net/browse/JDK-8061267> as that is
> not in
> any way touching linux .. it is a pre-existing issue in a code path
> that was not being tested.
>
> -phil.
>
> On 2/22/16, 11:59 AM, prasanta sadhukhan wrote:
>> Hi Phil,
>>
>> >>Additionally, have you tried running the original test case
>> provided with 8061267
>> >> against your fix ?
>> The 8061267 testcase behaves similarly before and after my fix.
>>
>> >> If I manually select it, (ie select that "Pages" radio button)
>> then press print,
>> >> then voila, the NPE is back!
>> It seems this behaviour is same in linux too for this HighResTest
>> testcase.
>>
>> Regards
>> Prasanta
>> On 2/20/2016 1:55 AM, Phil Race wrote:
>>> I am having trouble building JDK 9 at the moment so i applied
>>> 8061267 to jdk8u-dev
>>> and was able to reproduce the regression and have a couple of
>>> observations
>>>
>>> - I am now seeing the NPE after the first page as you did .. puzzling.
>>> - I next applied your fix but still see the NPE !
>>>
>>> It appears that all your fix did is stop the "PD_PAGENUMS" flag
>>> being automatically
>>> set. If I manually select it, (ie select that "Pages" radio button)
>>> then press print,
>>> then voila, the NPE is back!
>>>
>>> -phil.
>>>
>>>
>>> On 02/19/2016 10:53 AM, Phil Race wrote:
>>>> I am not sure I can be correctly understanding the fix as the
>>>> ramification seems
>>>> to be that if the users wants to print only Page 3 of a 10 page
>>>> document and so sets
>>>> from page=3 and to page=3, that this request will be ignored and
>>>> all pages will
>>>> be printed .. can you test such a scenario.
>>>>
>>>> Additionally, have you tried running the original test case
>>>> provided with 8061267
>>>> against your fix ?
>>>>
>>>> Also when I ran the HighResTest on a current build I saw a null
>>>> graphics on
>>>> the very first call to getGraphics() which is different than what I
>>>> interpret
>>>> you as saying - you see the null *after* the first page is printed.
>>>>
>>>> -phil.
>>>>
>>>> On 02/19/2016 01:18 AM, prasanta sadhukhan wrote:
>>>>> 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
>>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20160301/967caaeb/attachment.html>
More information about the 2d-dev
mailing list