gpt4 book ai didi

java - DefaultStyledDocument.styleChanged(Style style)可能无法及时运行?

转载 作者:行者123 更新时间:2023-12-02 00:51:37 29 4
gpt4 key购买 nike

我在扩展 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 方法中,您应该保存以打印包含所有更改的文档。

关于java - DefaultStyledDocument.styleChanged(Style style)可能无法及时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784420/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com