Java swing print()用法

时间:2011-02-10 14:52:20

标签: java swing printing

是否必须在EDT(事件调度线程)上调用java的swing print()?

正如我们所知道的那样,执行时需要花费更长的时间,并且长时间运行在EDT上的事情很痛苦。

2 个答案:

答案 0 :(得分:3)

简短回答,不,打印不需要在美国东部时间进行。

官方教程中介绍了这一点:How to Print Text

  

以交互方式或非交互方式打印

     

在交互模式下,会在打印期间显示带有中止选项的进度对话框。以下是进度对话框的示例。

     

此对话框允许用户跟踪打印进度。 当在事件派发线程上调用print方法时,进度对话框是模态的,否则是非模态的。在打印时文档保持不变是很重要的,否则打印行为是不确定的。打印方法可确保您的文档不会被更改,并在打印期间禁用该组件。

     

如果在非交互模式下调用事件派发线程上的print方法,则将阻止包括重绘在内的所有事件。 这就是为什么仅建议在具有不可见GUI的应用程序上以非交互方式在EDT上打印。

答案 1 :(得分:1)

请注意,JTextComponent是唯一可以使用其专用打印方法在后台线程上打印的Swing组件。从JComponent继承的print方法是线程安全。

一般情况下: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)