Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing-等待渲染完成_Java_Swing_Kotlin_Task_Event Dispatch Thread - Fatal编程技术网

Java Swing-等待渲染完成

Java Swing-等待渲染完成,java,swing,kotlin,task,event-dispatch-thread,Java,Swing,Kotlin,Task,Event Dispatch Thread,我有个小问题。我试图在JTextPane中显示非常大的文本(~10MB)。我想显示一个辅助对话框(使用动画gif作为不确定的进度条),直到文本由JTextPane呈现 到目前为止,我带着这个(科特林): 遗憾的是,在文档渲染完成之前,该对话框立即被取消。当EDT完成一个操作或其他什么的时候,我可以使用任何类型的回调吗 您可以在这里查看Swing workers:这将允许您对Swing中的异步任务进行更多控制 单独的问题:为什么不设置工作窗口可见性并在一个线程中加载文档?像这样: val work

我有个小问题。我试图在JTextPane中显示非常大的文本(~10MB)。我想显示一个辅助对话框(使用动画gif作为不确定的进度条),直到文本由JTextPane呈现

到目前为止,我带着这个(科特林):

遗憾的是,在文档渲染完成之前,该对话框立即被取消。当EDT完成一个操作或其他什么的时候,我可以使用任何类型的回调吗


您可以在这里查看Swing workers:这将允许您对Swing中的异步任务进行更多控制

单独的问题:为什么不设置工作窗口可见性并在一个线程中加载文档?像这样:

val worker = WorkerWindow(this, "Drawing text...") // JDialog

SwingUtilities.invokeLater {
    worker.isVisible = true
    textPane.document = logcat.document // Long UI operation
    worker.dispose()
}

似乎更容易…

我终于明白了

val worker = WorkerWindow(this, "Drawing text...")
Thread {
    textPane.document = logcat.document
    SwingUtilities.invokeLater {
        worker.dispose()
    }
}.start()
SwingUtilities.invokeLater {
    worker.isVisible = true
}

哦,实际上我刚刚注意到,在后台线程上更新文档会导致JTextPane更新!谢谢:)
val worker = WorkerWindow(this, "Drawing text...")
Thread {
    textPane.document = logcat.document
    SwingUtilities.invokeLater {
        worker.dispose()
    }
}.start()
SwingUtilities.invokeLater {
    worker.isVisible = true
}