1

我在从 Java 控制台迁移到 GUI 程序时遇到问题。

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

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

jTextArea.append(decipherment);

但是直到程序对每个单词都破译然后所有的破译都一起显示,而不是我想要的一个一个显示之前,什么都没有显示。

我的 GUI 程序的结构包括一个带有代码的按钮:

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

然后有一个部分:

public void decrypt(){
    ...
}

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

但是,如前所述,不会显示单独的解密。而是程序运行到最后,然后一起显示所有解密。

在阅读了其他线程后,我感觉我没有正确编写 GUI 程序,但我还没有发现我的错误是什么。帮助将不胜感激。

4

2 回答 2

4

阅读 Swing 教程中关于并发的部分,以了解 GUI 被阻止的原因。

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

于 2013-04-18T15:17:48.113 回答
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);
  }
});
于 2013-04-18T14:41:32.697 回答