如何在java GUI程序中获得增量显示

时间:2013-04-18 14:38:46

标签: java swing

从java控制台移动到GUI程序时遇到问题。

我的控制台程序加载字典中的所有单词。然后它依次使用每个单词来解密密码,在屏幕上显示第一个单词的解密文本,然后是第二个单词,依此类推。

当我编写GUI程序时,我有命令

jTextArea.append(decipherment);

但是在程序用每个单词解密之前都没有显示,然后所有的解密都一起显示,而不是一个接一个地显示。

我的GUI程序的结构包括一个代码为

的按钮
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    decrypt();
}

然后有一个部分:

public void decrypt(){
    ...
}

包含加载字典单词的代码,用每个单词进行解密 并使用方法调用显示每个解密:jTextArea.append(decipherment);

但是,如上所述,不会显示单个解密。而是程序运行到最后,然后将所有解密显示在一起。

在阅读其他主题后,我觉得我没有正确编写GUI程序,但我没有发现我的错误。帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

您的解密很可能与GUI在同一个线程中运行并锁定它。尝试生成一个新线程来运行你的解密,然后在Swing线程中更新你的GUI。

尝试这样的事情:

Thread workThread = new Thread(new Runnable() {  // run process in new thread
  public void run() {
    decrypt();
  }
});

workThread.start();

如何更新Swing线程:

EventQueue.invokeLater(new Runnable() {  // update Swing thread here
  public void run() {
    jTextArea.append(decipherment);
  }
});

答案 1 :(得分:4)

阅读Concurrency上Swing教程中的部分,了解GUI被阻止的原因。

您可以使用SwingWorker作为后台线程,然后使用publish结果,以便更新GUI。