【问题标题】:Java's swing print() usageJava的swing print()用法
【发布时间】:2011-02-10 14:52:20
【问题描述】:

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

众所周知,在 EDT 上长时间运行的东西需要很长的时间来执行,这很痛苦。

【问题讨论】:

    标签: java swing printing


    【解决方案1】:

    简短的回答,不,打印不需要在 EDT 上进行。

    这在官方教程中有介绍:How to Print Text

    交互式或非交互式打印

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

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

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

    【讨论】:

      【解决方案2】:

      请注意,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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多