[英]Printing intermediate steps in java freezes
我正在编写一个Java应用程序,该应用程序通过DES算法对输入进行加密和解密。 首先,我没有使用GUI,并使用System.out.print();
在输出窗口中打印了中间步骤System.out.print();
。 当输入很大时,计算可能要花一些时间,但是当使用输出窗口时,在计算时会一步步打印中间步骤。 那太完美了。
现在,我使用一个名为txtDebug的JTextArea为我的程序制作了一个GUI,以打印中间步骤:
public static void debug(String tekst){
txtDebug.setText(txtDebug.getText()+tekst+"\n");}
问题是:不再一步一步地打印中间步骤。 如果输入很大,则程序将冻结并且不执行任何操作,直到所有计算都完成,然后立即打印所有中间步骤。
另一个问题:当我不使用GUI时,程序永远不会崩溃,现在如果输入足够大,程序就会崩溃:它死机,永不恢复生命。
有什么帮助吗?
您必须在后台工作线程中完成工作。 在主线程中执行此操作将阻止Swing处理事件-> UI将会阻塞。
用户界面冻结,因为您正在对事件处理线程(负责处理事件和重新绘制UI的线程)执行长时间的计算。 为了避免此问题,请考虑在后台线程上执行加密/解密,也许使用SwingWorker
。
关于用户界面永不复活的第二点,这可能表明存在另一个资源问题(例如内存)。 发生此问题时,您可能想运行探查器或JConsole以查看每个线程的状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.