Java动态更新组件

时间:2014-12-24 01:23:39

标签: java swing dynamic concurrency jeditorpane

所以假设我有一个 JEditorPane

我还有一个名为addText(String S)的void,就像这样

public void addText(String s)
jeditorpane.setText(jeditorpane.getText() + s);
}

现在我将有一个按钮,当按下时会读取文本文件的所有行,并使用缓冲的阅读器将它们写入文本编辑器框并逐行添加文本。

为什么当按下按钮时,应用程序将冻结几秒钟,然后立即发布所有内容。 这是他们的一种方式,因此您可以看到动态发布的所有内容,并逐一发布。这就是编写代码的方式。

我从StackOverFlow获得了一些可能对您有所帮助:

1 个答案:

答案 0 :(得分:5)

  

为什么当按下按钮时,应用程序将冻结几秒钟,然后立即发布所有内容。

你正在慢慢阅读Swing事件线程,占用线程并阻止它完成其工作,包括绘制到GUI并与用户交互。

  

这是他们的方式,所以你看到动态发布的所有内容,并看到它一个接一个地发布。这就是编写代码的方式。

是的,使用后台线程,最容易通过使用SwingWorker获得。阅读Concurrency in Swing

您可能希望使用通用的SwingWorker,特别是SwingWorker<Void, String>,并使用它的发布/处理方法对在每行读取时将字符串推出到文本组件中。


编辑:我现在看到你在问题中提到的两个链接已经提到了这个解决方案,这让我想知道你为什么问这个问题。