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