Должен ли java Swing Print () вызываться в EDT (нить диспетчеризации событий)?
Требуется длительное время для выполнения, и длительные действия, связанные с EDT, являются болью, как мы все знаем.
Короткий ответ, нет, печать не требуется проводить на EDT.
Это описано в официальном руководстве: Как печатать текст
Печать в интерактивном или неинтерактивном режиме В интерактивном режиме отображается диалоговое окно прогресса с параметром прерывания на время печати.Вот пример диалогового окна хода выполнения. Это диалоговое окно позволяет пользователю отслеживать ход печати. Диалог выполнения является модальным, когда метод печати вызывается в потоке отправки событий, и немодальным в противном случае. Важно, чтобы ваш документ оставался неизменным во время печати, в противном случае поведение при печати не определено.Метод печати гарантирует, что ваш документ не будет изменен, и отключает компонент на время печати. Если вы вызываете метод печати в потоке отправки событий в неинтерактивном режиме, то все события, включая перерисовки, будутбыть заблокирован. Именно поэтому неинтерактивная печать на EDT рекомендуется только для приложений с невидимым графическим интерфейсом.
Печать в интерактивном или неинтерактивном режиме
В интерактивном режиме отображается диалоговое окно прогресса с параметром прерывания на время печати.Вот пример диалогового окна хода выполнения.
Это диалоговое окно позволяет пользователю отслеживать ход печати. Диалог выполнения является модальным, когда метод печати вызывается в потоке отправки событий, и немодальным в противном случае. Важно, чтобы ваш документ оставался неизменным во время печати, в противном случае поведение при печати не определено.Метод печати гарантирует, что ваш документ не будет изменен, и отключает компонент на время печати.
Если вы вызываете метод печати в потоке отправки событий в неинтерактивном режиме, то все события, включая перерисовки, будутбыть заблокирован. Именно поэтому неинтерактивная печать на EDT рекомендуется только для приложений с невидимым графическим интерфейсом.
Имейте в виду, что JTextComponent является единственным компонентом Swing, который может быть напечатан в фоновом потоке с помощью его специальных методов печати. Метод печати, унаследованный от JComponent, не потокобезопасен.
В целом: Swing является однопоточным, если не указано иное. Специальный метод печати JTextComponent явно заявляет, что он безопасен для потоков:
http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#print(java.text.MessageFormat,%20java.text.MessageFormat,%20boolean,%20javax.print.PrintService,%20javax.print.attribute.PrintRequestAttributeSet,%20boolean)