[OpenJDK 2D-Dev] [10] RFR JDK-8186987:NullPointerException in RasterPrinterJob without PrinterResolution
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Thu Aug 31 10:08:35 UTC 2017
Hi All,
Please review a fix for an issue where it a NPE is seen when an attempt
is made to print to Brother HL-2240D series printer.
It seems when RasterPrinterJob#setAttributes() is called with no
PrinterResolution attribute set, it first checks if PrinterResolution
category is supported.
If it is supported, then it sees if the supplied resolution value is
supported. Now, since no PrinterResolution attribute is set, so
isSupportedValue() returns false [as "printer resolution attribute"
object is null]
It then goes to get the default resolution attribute via
getDefaultAttributeValue() which calls getDefaultPrinterSettings() and
use yRes,Quality from this printer to construct a "PrinterResolution"
object.
Now, it seems in Brother HL-2240D series printer, it supports 3
resolution [300, 600, HQ 1200] but for all these 3 resolutions,
getDefaultPrinterSettings() returns -50 for yRes and Quality.
So, as per this code
http://hg.openjdk.java.net/jdk10/client/jdk/file/dbb5b171a16b/src/java.desktop/windows/classes/sun/print/Win32PrintService.java#l1189
res < 0 and no PrinterResolution object is instantiated so when RPJ
accesses
printerResAttr.getCrossFeedResolution(ResolutionSyntax.DPI); it causes
NPE.
Proposed fix is to create a default lowly 300 dpi PrinterResolution if,
for some reason, yRes and Quality from printer comes out -ve.
http://cr.openjdk.java.net/~psadhukhan/8186987/webrev.00/
Regards
Prasanta
More information about the 2d-dev
mailing list