Печать с Java - задания на печать зависают навсегда - PullRequest
1 голос
/ 12 апреля 2011

У меня есть функция печати на стороне сервера, вызванная из Tomcat на сервере Windows 2008, которая в этом случае печатает на принтере по умолчанию, и она зависает навсегда. Это трассировка стека:

at sun.awt.windows.WPrinterJob._startDoc(Native Method)
at sun.awt.windows.WPrinterJob.startDoc(WPrinterJob.java:1249)
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1371)
at com.gnostice.pdfone.PdfPrinter.a(Unknown Source)
at com.gnostice.pdfone.PdfPrinter.print(Unknown Source)
at com.gnostice.pdfone.PdfPrinter.print(Unknown Source)
at de.ikoffice.print.PrintService.printPDF(PrintService.java:64)
at de.ikoffice.document.Document.printPDFToPrinter(Document.java:261)
at de.ikoffice.document.Document.start(Document.java:91)
at de.ikoffice.document.DocumentService.processMessage(DocumentService.java:48)

Виновным является принтер "Microsoft XPS document writer", который, кажется, открывает окно в некотором фоновом контексте оболочек (сервер - это Tomcat 5.5, работающий от имени пользователя Tomcat) и зависает там навсегда, и я не знаю, что лучший способ справиться с ситуацией.

Есть идеи? Жесткое кодирование имени принтера и запрет на печать на нем? прекратить () поток? Это встроенная функция, поэтому я не могу прерывать () поток с желаемыми результатами.

1 Ответ

2 голосов
/ 05 августа 2013

У нас была похожая проблема с физическим принтером.Из того, что я читаю в Интернете, Windows Server 2008 запускает службы в специальном сеансе без пользовательского интерфейса, поэтому любое всплывающее окно может повесить приложение.

Можете ли вы удалить XPS Writer с сервера и использовать настоящий принтер?Или явно проверить XPS Writer и не позволить пользователю печатать на нем?

Я видел упоминание в Интернете о различных методах, позволяющих взаимодействовать с пользователем в WS 2008, но не могу сказать, подходят ли они дляпотребности вашего приложения.

...