Hello,

Could you please review the following fix for the bug specific to macOS. The 
bug consists in the fact that if the method 
"java.awt.print.Printable.print​(Graphics, PageFormat, int)" throws 
"java.awt.print.PrinterException" or "java.lang.RuntimeException" during the 
call "java.awt.print.PrinterJob.print()", then the exception is caught and 
ignored by JDK and a user cannot learn that printing failed and what caused 
failure of printing, because "PrinterJob.print()" method does not throw 
"PrinterException" or the occurred exception is not reported by JDK through the 
error stream.

ROOT CAUSE OF THE BUG:
The root cause of the bug is the fact that in the method 
"sun.lwawt.macosx.CPrinterJob.printAndGetPageFormatArea(final Printable, final 
Graphics, final PageFormat, final int)" from the file 
"src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java" the 
exception thrown during execution of the expression

"int pageResult = printable.print(graphics, pageFormat, pageIndex);"

is caught but is not returned to a developer by any mean or is not printed out 
to the error stream.

THE FIX:
The fix implements propagation of the occurred and caught exception to the 
level of the user's code executing "PrinterJob.print()" method. Propagation of 
the exception by storing it in the instance variable of "CPrinterJob" object is 
implemented, because the engaged code always is executed:
- on 2 threads (non-EDT thread, EDT thread) in case when "PrinterJob.print()" 
is called by the user on a non-EDT thread;
- on 3 threads (2 EDT threads, a temporary thread started by JDK to execute 
"CPrinterJob._safePrintLoop(long, long );") when "PrinterJob.print()" is called 
on EDT thread.

The regression test which is part of the fix was also successfully executed on 
MS Windows OS and Linux OS.

Thank you,
Anton

-------------

Commit messages:
 - 8262731: [macOS] Exception from "Printable.print" is swallowed during 
"PrinterJob.print"

Changes: https://git.openjdk.java.net/jdk/pull/4036/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4036&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8262731
  Stats: 153 lines in 2 files changed: 144 ins; 0 del; 9 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4036.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4036/head:pull/4036

PR: https://git.openjdk.java.net/jdk/pull/4036

Reply via email to