我正在写一个java应用程序,通过DES算法加密和解密输入。首先,我在没有GUI的情况下制作了它,并使用System.out.print();
在输出窗口中打印了中间步骤。当输入较大时,计算可能需要一段时间,但是当使用输出窗口时,中间步骤将在计算时逐一打印。那很完美。在java中打印中间步骤冻结
现在我由GUI我的程序,使用一个JTextArea,称为txtDebug用于打印的中间步骤:
public static void debug(String tekst){
txtDebug.setText(txtDebug.getText()+tekst+"\n");}
问题:中间步骤不打印逐个了。如果输入量很大,程序就会冻结并不执行任何操作,直到计算全部完成,然后一次打印所有中间步骤。
另一个问题:当我没有使用GUI时,程序从未崩溃,现在如果输入足够大,程序崩溃:它冻结,永远不会回到生活。
请帮忙吗?
感谢您的回复,我已阅读了SwingWorker,但我不确定如何实现它,这是我的程序的结构:我有一个Functions.java,其中包含用于加密的所有函数以及解密,2个类Encryption.java和Decryption.java,他们从Functions.java调用正确的函数,并且我有一个Main.java类,它包含GUI和actionhandlers并调用Encrypt.java或Decrypt.java。我还在Main.java中添加了一个函数,以便Encrypt.java和Decrypt.java可以将调试信息写入txtDebug。哪些类需要扩展SwingWorker? – user1026090
无; SwingWorker是一个实用程序类。请参阅JavaDocs中的示例(我的答案中的第二个链接)。请参阅http://download.oracle.com/javase/tutorial/uiswing/concurrency/interim.html –
谢谢,我现在使用我的Encrypt类中的SwingWorker在后台进行计算,并在计算完成后,打印我的GUI中的中间步骤。现在还有一个问题:没有GUI,我的程序计算速度非常快,大约每秒100次迭代。使用GUI和SwingWorker,我的程序每秒只能计算一次迭代。这怎么发生的? – user1026090