我的 Swing 应用程序中有 JEditorPane (communicationView),有时我需要将它滚动到底部。通过将插入符号位置设置为文档末尾来完成滚动。
private void setCommunicationViewCaretPosition(){
communicationView.setCaretPosition(communicationView.getDocument().getLength());
}
这通常有效,但一段时间后会引发以下异常:
Exception in thread "Thread-6" java.lang.IllegalStateException: cannot open system clipboard
at sun.awt.windows.WClipboard.openClipboard(Native Method)
at sun.awt.datatransfer.SunClipboard.getClipboardFormatsOpenClose(SunClipboard.java:332)
at sun.awt.datatransfer.SunClipboard.isDataFlavorAvailable(SunClipboard.java:192)
at org.jdesktop.application.TextActions.updateTextActions(TextActions.java:132)
at org.jdesktop.application.TextActions.access$400(TextActions.java:47)
at org.jdesktop.application.TextActions$TextComponentCaretListener.caretUpdate(TextActions.java:115)
at javax.swing.text.JTextComponent.fireCaretUpdate(JTextComponent.java:407)
at javax.swing.text.JTextComponent$MutableCaretEvent.fire(JTextComponent.java:4417)
at javax.swing.text.JTextComponent$MutableCaretEvent.stateChanged(JTextComponent.java:4439)
at javax.swing.text.DefaultCaret.fireStateChanged(DefaultCaret.java:802)
at javax.swing.text.DefaultCaret.changeCaretPosition(DefaultCaret.java:1277)
at javax.swing.text.DefaultCaret.handleSetDot(DefaultCaret.java:1173)
at javax.swing.text.DefaultCaret.setDot(DefaultCaret.java:1154)
at javax.swing.text.DefaultCaret.setDot(DefaultCaret.java:1051)
at javax.swing.text.JTextComponent.setCaretPosition(JTextComponent.java:1680)
at aau.application.ApplicationView.setCommunicationViewCaretPosition(ApplicationView.java:643)
我无法弄清楚为什么会发生这种情况,或者设置插入符号位置与系统剪贴板有什么关系。
设置插入符号位置似乎是向下滚动视图的最佳方式,但任何其他方法都可以解决我的问题。