从java控制台移动到GUI程序时遇到问题。
我的控制台程序加载字典中的所有单词。然后它依次使用每个单词来解密密码,在屏幕上显示第一个单词的解密文本,然后是第二个单词,依此类推。
当我编写GUI程序时,我有命令
jTextArea.append(decipherment);
但是在程序用每个单词解密之前都没有显示,然后所有的解密都一起显示,而不是一个接一个地显示。
我的GUI程序的结构包括一个代码为
的按钮private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
decrypt();
}
然后有一个部分:
public void decrypt(){
...
}
包含加载字典单词的代码,用每个单词进行解密
并使用方法调用显示每个解密:jTextArea.append(decipherment);
但是,如上所述,不会显示单个解密。而是程序运行到最后,然后将所有解密显示在一起。
在阅读其他主题后,我觉得我没有正确编写GUI程序,但我没有发现我的错误。帮助将不胜感激。
答案 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。