繁体   English   中英

用Java冻结打印中间步骤

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM