首页明星Swing线程如何处理?

Swing线程如何处理?

paiquba 12-15 18次浏览 0条评论

  我们知道这将在非Swing线程中调用,因为该事件是直接在LookupManager中触发的,这将不是在Swing线程中执行。因为所有的代码功能上都是异步的(我们不必等待监听器 *** 答应 结束后才调用其它代码),我们可以通过SwingUtilities。

Swing线程如何处理?

  invokeLater()将这些代码改道到Swing线程。下面是新的 *** ,传进 一个匿名Runnable到SwingUtilities。invokeLater():

public void lookupCompleted(final LookupEvent e) {

//notice the threading

SwingUtilities。

  invokeLater( new Runnable() {

public void run() {

outputTA。setText("");

String[] results = e。getResults();

for (int i = 0; i   length; i++) {

String result = results[i];

outputTA。setText(outputTA。getText() + " " + result);

假如 任何LookupListener不是在Swing线程中执行,我们可以在调用线程中执行监听器代码。

  作为一个原则,我们期看 所有的监听器都迅速地接到通知。所以,假如 你有一个监听器需要很多时间来处理自己的功能,你应该创建一个新的线程或者把耗时代码放进 ThreadPool中等待执行。

最后的步骤是让LookupManager在非Swing线程中执行lookup。

  当前,LookupManager是在JButton的 ActionListener的Swing线程中被调用的。现在是我们做出决定的时候,或者我们在JButton的ActionListener中引进 一个新的线程,或者我们可以保证lookup自己在非Swing线程中执行,自己开始一个新的线程。

  我抉择 尽可能和Swing类贴近地治理 Swing线程。这有助于把所有Swing逻辑封装在一起。假如 我们把Swing线程逻辑添加到LookupManager,我们将引进 了一层不必要的依靠 。并且,对于 LookupManager在非Swing线程环境中孵化自己的线程是完全没有必要的,比如一个非绘图的用户界面,在我们的例子中,就是Logger。

  产生不必要的新线程将损害到你使用 的性能,而不是提高性能。LookupManager执行的很好,不管Swing线程与否——所以,我喜欢把代码集中在那儿。

现在我们需要将JButton的ActionListener执行lookup的代码放在一个非Swing线程中。

  我们创建一个匿名的Thread,使用一个匿名的Runnable执行这个lookup。

private void searchButton_actionPerformed() {

new Thread(){

public void run() {

lookupManager。

  lookup(searchTF。getText());

}。start();

这就完成了我们的Swing线程。简单地在actionPerformed() *** 中添加线程,确保监听器在新的线程中执行照顾到了整个线程问题。注重 ,我们不用处理像第一个例子那样的任何问题。

  通过把时间花费在定义一个事件驱动的体系,我们在和Swing线程相关处理上节约了更多的时间。

Swing Girls
swing clear什么意思 swing是什么意思?
相关内容
发表评论

游客 回复需填写必要信息