1

私は次のことを行うプロジェクトを開発しています:

1. 一時テーブル T1 を切り捨てます。

2. 数千行を一時テーブル T1 に挿入します。

3. commit ステートメントを含むプロシージャを実行します。

4. テーブル T1 から他の同一のテーブル (構造に関して) T2 に行を挿入します。

5.さらに 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 コンポーネントはこのメソッドに依存しています。誰かが私にもっと良いデザインオプションを提案できますか?

前もって感謝します !

4

1 に答える 1

2

log.debug(message) は私のために仕事をします! ただし、これは私のコード設計を複雑にします。現在、すべての DAO コンポーネントはこのメソッドに依存しています。誰かが私にもっと良いデザインオプションを提案できますか?

  • Swing の Concurency に問題がある場合、 wrap statusText.append(message + "\n"); にinvokeLater

  • Swing はシングル スレッドであり、既に表示されている Swing GUI に対するすべての更新は、イベント ディスパッチ スレッドで行う必要があります。

  • SwingWorkerを見ることができるかもしれませんが、投稿された説明から明らかなことは何もありません。それは困難で長時間実行される可能性があり、EDTの問題について話しているだけです

  • プロセッサの消費を減らし、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 
于 2013-08-26T11:08:59.853 に答える