Neil,

You are throwing an IOException and we already have the code to catch
that and re-throw as the documented printer exception type, and also the event should
get notified to any listeners.  So far so good.

But you are throwing the IOException before calling spoolFile.delete() so we'll leak
the spool file.
Arguably that could happen anyway if there were an Exception but that was
probably not occurring previously.

I suggest either to move the spoolfile.delete() to *before* the handleError call
or into a finally { } block.

-phil.


On 10/20/2011 11:56 AM, Neil Richards wrote:
Hi all,
Whilst trying to debug a printing problem, I noticed that the (Unix and
PostScript) printer spoolers in Java do not check what the result is of
trying to launch the OS print spooler command (often 'lpr' or 'lp').

As a result, if that exec'd command fails for any reason, that result
(and that reason) is lost, and the user left without any clue that
something is amiss.

To address this, I've created a suggested fix [1], which checks the exit
code for the exec'd command and, if it's bad, throws an exception which
captures any text from the command's error stream.

It does this in both sun.print.PSPrinterJob and sun.print.UnixPrinterJob
(they are very similar in composition and function).

Please review this suggested change.

Thanks, Neil

[1] http://cr.openjdk.java.net/~ngmr/ojdk-201/webrev.01/index.html


Reply via email to