摇摆-等待渲染完成

时间:2019-08-06 18:28:08

标签: java swing kotlin task event-dispatch-thread

我有一个小问题。我试图在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完成某项操作时,可以使用某种回调吗?

Worker dialog

2 个答案:

答案 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
}