是否必须在EDT(事件调度线程)上调用java的swing print()?
正如我们所知道的那样,执行时需要花费更长的时间,并且长时间运行在EDT上的事情很痛苦。
答案 0 :(得分:3)
简短回答,不,打印不需要在美国东部时间进行。
官方教程中介绍了这一点:How to Print Text
以交互方式或非交互方式打印
在交互模式下,会在打印期间显示带有中止选项的进度对话框。以下是进度对话框的示例。
此对话框允许用户跟踪打印进度。 当在事件派发线程上调用print方法时,进度对话框是模态的,否则是非模态的。在打印时文档保持不变是很重要的,否则打印行为是不确定的。打印方法可确保您的文档不会被更改,并在打印期间禁用该组件。
如果在非交互模式下调用事件派发线程上的print方法,则将阻止包括重绘在内的所有事件。 这就是为什么仅建议在具有不可见GUI的应用程序上以非交互方式在EDT上打印。
答案 1 :(得分:1)
请注意,JTextComponent是唯一可以使用其专用打印方法在后台线程上打印的Swing组件。从JComponent继承的print方法是不线程安全。
一般情况下:Swing是单线程的,除非另有说明。 JTextComponent的专用打印方法明确声明它是线程安全的: