[OpenJDK 2D-Dev] [9] Review Request: 8046007: Java app receives javax.print.PrintException: Printer is not accepting job
Phil Race
philip.race at oracle.com
Tue Jul 22 21:44:33 UTC 2014
I think this is OK. Perhaps some of these states being deleted ought instead
to bubble up into a PrinterState of STOPPED and appropriate
PrinterStateReasons
but that's something that can be handled separately.
-phil.
On 7/22/14 7:52 AM, Alexey Ivanov wrote:
> Hi Phil, Jennifer,
>
> Could you please review this fix?
>
> Thank you in advance,
> Alexey.
>
> On 16.07.2014 17:09, Alexey Ivanov wrote:
>> Hello,
>>
>> Please review the fix for jdk9:
>> bug: https://bugs.openjdk.java.net/browse/JDK-8046007
>> webrev: http://cr.openjdk.java.net/~aivanov/8046007/jdk9/webrev.00/
>>
>> Problem description:
>> If printer is an error state for some reason, Java application cannot
>> post a new print job to printer queue because of exception:
>> java.awt.print.PrinterException: Printer is not accepting job.
>> at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1326)
>> at
>> javax.swing.text.JTextComponent$2.call(JTextComponent.java:2320)
>> at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>> at
>> javax.swing.text.AbstractDocument.render(AbstractDocument.java:420)
>> at
>> javax.swing.text.JTextComponent$3.run(JTextComponent.java:2369)
>> at java.lang.Thread.run(Thread.java:744)
>>
>> At the same time, regular Windows applications (e.g. Word) can still
>> add new print jobs to the queue of this printer.
>>
>> See also related JDK-6996782: RFE: Optionally allow submitting
>> printjobs even if Printer is not accepting job
>> and JDK-6525150: Printer has "paper out" status and won't print due
>> to a PrinterException.
>>
>>
>> The fix:
>> Currently Java checks the status of the printer, and does not allow
>> posting a new print job if the printer is in an error state. At the
>> same time, the print queue functions without any issues. It is user's
>> responsibility to fix a problem with the printer, as soon as it's
>> resolved, all the print jobs will be processed by the printer.
>>
>> Microsoft Knowledge Base article
>> http://support.microsoft.com/kb/160129 says:
>> The Printer is assumed ready to accept print jobs … even if the
>> physical printer is in an error state such as off-line.
>>
>> As far as I can see, the only printer state from the list
>> (http://msdn.microsoft.com/en-us/library/windows/desktop/dd162845%28v=vs.85%29.aspx)
>> that doesn't allow adding new print jobs is
>> PRINTER_STATUS_PENDING_DELETION which means "The printer is being
>> deleted." Surely one cannot print to a deleted printer.
>>
>>
>> I tested this fix by disconnecting the network printer. It takes some
>> time for printer monitor to update the status before communication
>> error is detected. It would not be detected at all until you add at
>> least one print job. As soon as the printer driver detects the
>> problem and communicates it to Windows, printer queue displays an
>> error state on the currently processed print job. From that moment,
>> Java apps cannot print to this printer.
>>
>> With this fix, Java still considers "Accepting jobs" and thus allows
>> posting new jobs to the printer queue.
>>
>> When the connection to the printer is restored, all the queued jobs
>> are successfully processed and documents are printed.
>>
>>
>> Regression test:
>> I ran regressions tests in jdk/tests/javax/print, and all tests passed.
>>
>> No regression test is provided due to its complexity. Printer should
>> go to an error state, it depends on the printer driver and on whether
>> the printer is local or network.
>>
>> There's a test app and steps to try to reproduce the issue in the JBS
>> bug 8046007.
>>
>>
>> Thank you,
>> Alexey.
>
More information about the 2d-dev
mailing list