2013-04-18 49 views
1

我在從java控制檯移動到GUI程序時遇到問題。如何在java GUI程序中獲得增量顯示

我的控制檯程序加載字典中的所有單詞。然後,它依次使用每個單詞來解密密碼,在屏幕上顯示第一個單詞的解密文本,然後顯示第二個單詞等等。

當我寫的GUI程序,我有命令

jTextArea.append(decipherment); 

,但什麼都不顯示,直到程序的每一個字解密,然後所有的釋讀一起顯示,而不是一個接一個,因爲我想。

我的GUI程序的結構包括與所述代碼的按鈕:

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

,然後有一個部分:

public void decrypt(){ 
    ... 
} 

包含代碼來加載詞典中的單詞,做用每個字 解密並用方法調用顯示每個解密:jTextArea.append(decipherment);

但是,如上所述,單獨的deci不顯示。程序運行到最後,然後一起顯示所有的解密。

閱讀其他線程後,我覺得我沒有正確編寫GUI程序,但我還沒有找到我的錯誤是什麼。幫助將不勝感激。

回答

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); 
    } 
}); 
4

閱讀從Swing教程中的部分上Concurrency理解爲什麼GUI被阻止。

您可以使用SwingWorker作爲後臺線程,然後使用publish結果,因此GUI可以更新。

+0

謝謝。這兩個都有幫助。 – user2256790