を拡張するクラスで断続的な問題が発生しています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)
は、ドキュメントがレンダリングされる前にドキュメントに表示されるフォーマットの変更を期待できないことを意味しますか?
その場合、更新が行われるまでレンダリングを続行しないようにする方法はありますか?