我正在编写一个Java应用程序,该应用程序通过DES算法对输入进行加密和解密。首先,我没有GUI,并使用System.out.print();
在输出窗口中打印了中间步骤。当输入很大时,计算可能要花一些时间,但是当使用输出窗口时,在计算时会一步步打印中间步骤。那太完美了。
现在,我使用一个名为txtDebug的JTextArea为我的程序制作了一个GUI,以打印中间步骤:
public static void debug(String tekst){
txtDebug.setText(txtDebug.getText()+tekst+"\n");}
问题是:不再一步一步地打印中间步骤。如果输入很大,则该程序将冻结并不执行任何操作,直到完成所有计算,然后立即打印所有中间步骤。
另一个问题:当我不使用GUI时,该程序从未崩溃,现在,如果输入足够大,则该程序崩溃:它冻结,并且永不恢复生命。
有什么帮助吗?
最佳答案
您必须在后台工作线程中完成工作。在主线程中执行此操作将阻止Swing处理事件-> UI将会阻塞。
http://www.kdgregory.com/index.php?page=swing.async
http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html