2013-08-26 92 views
1

我正在開發一個項目,它執行以下操作:在TextArea上打印交易狀態

1.截斷臨時表T1。

2.將1000行插入臨時表T1中。

3.執行一個有一些提交語句的程序。從表T1

4.insert行其它相同的表(相對於結構)T2

5.Execute 2名手續。

現在我已經做了一個包含TextArea的揮杆UI,我想在其中打印交易狀態。事情是這樣的

閱讀Excel文件.. 驗證Excel文件.. 插入條目在T1表中..等等

我已經做了以下方法在每一步更新狀態。

public void updateStatus(String message){ 
     String temp = this.statusText.getText(); 
     this.statusText.setText(temp + message + "\n"); 
} 

與報表我哪裏

log.debug(message)做這項工作,我沿着調用此方法!然而,這使我的代碼設計變得複雜。現在每個DAO組件都依賴於這種方法。任何人都可以給我一個更好的設計選擇。

在此先感謝!

回答

2

log.debug(message)爲我完成這項工作!然而,這使我的代碼設計複雜化。現在每個DAO組件都依賴於這種方法。可以 任何人都建議我一個更好的設計選項。

  • 你有Concurency in Swing問題,包statusText.append(信息+ 「\ n」);到invokeLater

  • Swing是單線程的,和已經可見Swing GUI的所有更新必須在Event Dispatch Thread

  • 做也許你可以看看SwingWorker,沒有張貼描述清楚,只知道可能很難和長時間運行的,在談論美國東部時間問題

  • 減少procesors消費和使用正確的方法追加一個新的String已可見JTextArea,使用statusText.append(message + "\n");而不是挺難

String temp = this.statusText.getText(); // take all string from JTextArea 
this.statusText.setText(temp + message + "\n"); // append() a new line to 
+0

擺動工人似乎是一個不錯的選擇。但是在我的情況下,一次只能運行一個程序實例。在那種情況下,我應該去Swing Worker嗎? –

+1

是默認情況下,SwingWorker不可重用,可共享,新運行等於新實例 – mKorbel