我有一个小问题。我试图在JTextPane中显示很大的文本(〜10 MB)。我想显示一个工作对话框(动画gif作为不定的进度条),直到文本由JTextPane呈现为止。
到目前为止,我是带着这个(kotlin)来的:
val worker = WorkerWindow(this, "Drawing text...") // JDialog
SwingUtilities.invokeLater {
worker.isVisible = true
}
SwingUtilities.invokeLater {
textPane.document = logcat.document // Long UI operation
worker.dispose()
}
可悲的是,该对话框在文档渲染完成之前立即被关闭。当EDT完成某项操作时,可以使用某种回调吗?
答案 0 :(得分:2)
您可以在此处查看Swing工作人员:https://docs.oracle.com/javase/8/docs/api/index.html?javax/swing/SwingWorker.html,这将使您可以更好地控制Swing中的异步任务。
另一个问题:为什么不设置工作窗口可见性并在一个线程中加载文档?像这样:
val worker = WorkerWindow(this, "Drawing text...") // JDialog
SwingUtilities.invokeLater {
worker.isVisible = true
textPane.document = logcat.document // Long UI operation
worker.dispose()
}
似乎更容易...
答案 1 :(得分:0)
我终于知道了!
val worker = WorkerWindow(this, "Drawing text...")
Thread {
textPane.document = logcat.document
SwingUtilities.invokeLater {
worker.dispose()
}
}.start()
SwingUtilities.invokeLater {
worker.isVisible = true
}