我正在遇到一个间歇性问题,该课程扩展 javax.swing.text.DefaultStyledDocument. 。该文档正在发送到打印机。大多数情况下,文档的格式看起来正确,但偶尔却没有。看起来格式中的某些更改尚未应用。

我看了看 DefaultStyledDocument.styleChanged(Style style) 代码:

/**
 * Called when any of this document's styles have changed.
 * Subclasses may wish to be intelligent about what gets damaged.
 *
 * @param style The Style that has changed.
 */
protected void styleChanged(Style style) {
    // Only propagate change updated if have content
    if (getLength() != 0) {
        // lazily create a ChangeUpdateRunnable
        if (updateRunnable == null) {
            updateRunnable = new ChangeUpdateRunnable();
        }

        // We may get a whole batch of these at once, so only
        // queue the runnable if it is not already pending
        synchronized(updateRunnable) {
            if (!updateRunnable.isPending) {
                SwingUtilities.invokeLater(updateRunnable);
                updateRunnable.isPending = true;
            }
        }
    }
}

/**
 * When run this creates a change event for the complete document
 * and fires it.
 */
class ChangeUpdateRunnable implements Runnable {
    boolean isPending = false;

public void run() {
        synchronized(this) {
            isPending = false;
        }

    try {
    writeLock();
    DefaultDocumentEvent dde = new DefaultDocumentEvent(0,
                      getLength(),
                      DocumentEvent.EventType.CHANGE);
    dde.end();
    fireChangedUpdate(dde);
    } finally {
    writeUnlock();
    }
}
}

做事实 SwingUtilities.invokeLater(updateRunnable) 被称为,而不是 invokeAndWait(updateRunnable), ,意味着我不能指望在文档渲染之前出现在文档中出现的更改?

如果是这样,是否有一种方法可以确保在更新发生之前我不继续渲染?

有帮助吗?

解决方案

你看到一个 fireChangedUpdate(dde); 在代码末尾。尝试将自己作为一个 DocumentListener. 。在 - 的里面 DocumentListener.changedUpdate 您应该保存的方法以打印文档,其中包括所有更改。

其他提示

我也有类似的问题。

为了解决,我在秋千文本,一个空的InvokeLater中设置了一些东西后启动,当完成此InstokeLater后,我希望秋千文本以后完成。

我的代码也许比我的英语更好:

doc.formatSomethingWhichPerhapsLaunchInvokeLater();
EventQueue.invokeLater(new java.lang.Runnable()
{
  public void run()
  {
    // at this point, I hope all swing text stuff is finish. 
    // Until now, it's the case.
  }
});

这是恐怖的,但很抱歉。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top