java - Swing - 等待渲染完成

标签 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

最佳答案

您可以在这里查看 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()
}

看起来更容易...

关于java - Swing - 等待渲染完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57382012/

相关文章:

multithreading - Coroutine Scope、Suspend 和 withContext 查询

android - 为什么 SQLite 文件存在但 openDatabase 出错?

java - felix exthttpservice 设置 cookie 的 session 路径

Java:将 byte[] 转换为 base36 字符串

java - 如何防止窗口关闭?

java - 按钮事件的字符串比较

Java 第二个变量忽略第一个变量

android - Dagger2 + Kotlin : lateinit property has not been initialized

java - 有没有一种快速方法可以将一堆静态常量移动到另一个(非嵌套)类?

java - 使用 JNI 调用 API 访问静态枚举字段