2012-02-22 13 views
1

小さなtextEditorの作成についての考え方。テキスト入力用とテキスト入力用の2つのテキストエリアがあります。私の理解としては、SwingWorkerはバックグラウンドで動作するので、UIの更新に遅延はありません。チェックのために、私は以下のコードを書いて5000行を挿入してタイプしようとしましたが、ラインが増加するにつれて、textEditor2の更新が非常に遅くなっていると思います。 swingworkerの実装はコードで正しいですか?SwingWorkerの実装

textEditor1とtextEditor2はJTextAreaに

あなたがSwingWorkerを使用しないでください。このタスクについては
private void editorKeyPressed(java.awt.event.KeyEvent evt) { 

SwingWorker worker = new SwingWorker<Void, Void>() { 
    String text = null; 

    @Override 
    protected Void doInBackground() throws Exception { 
     text = textEditor1.getText().toString(); 
     return null; 
    } 

    @Override 
    protected void done() { 
     try { 
      get(); 
      textEditor2.setText(text); 
     } catch (Exception ex) { 
      System.out.println(ex); 
     } 
    } 
}; 

worker.execute(); 
} 
+0

get()メソッドとは何ですか? – Balconsky

+0

get()はdoInBackground()によってスローされた例外をキャッチします – FirmView

+0

おそらく、あなたの質問を更新し、あなたが達成しようとするものを(ユーザーの視点から)示すことができます。あなたの検証に数秒かかる場合を除き、通常はユーザー入力を検証するだけの簡単な方法はSwingworkerを必要としないためです。しかし、平均的なユーザーの方がはるかに速く入力するので、すべてのキーストロークで検証を実行することはできません。 – Robin

答えて

3

キーを押すたびにワーカースレッドが生成されますので、パフォーマンスが低下することが予想されます。

UIの応答性を維持するために実行するスレッドの数を管理する必要があります。バックグラウンドタスクを常に実行したい場合は、独自のスレッドを設定し、コンカレントパッケージのクラスを使用して、イベントスレッドからデータを渡すようにします(例:ArrayBlockingQueue)。

+0

はい、ただし、このリスナーはテキストが変更されるたびに機能します。 – Balconsky

+1

それは問題だと思っています...キーを押すたびに、新しいスイングワーカーがインスタンス化されて実行されます(つまり、それは動作しています)。各新しいスレッドへのコンテキスト切り替え(それらが素早く起動されている場合)は、すべてを遅くしています。 – John

+0

ええ、ジョン。今私はswingworkerを定期的に呼びます。それは大丈夫だと思われる。ありがとう – FirmView

0

です。 1つのスレッドでそれをやってください。

private void editorKeyPressed(java.awt.event.KeyEvent evt) { 
text = textEditor1.getText(); 
textEditor2.setText(text); 
} 
+0

Balconsky、ええ、私はそのテキストを知っている= textEditor1.getText(); textEditor2.setText(text);することができます。私はdoInBackground()とupdation()でvalidtionコードを書くことを考えています。私はswingworkerがバックグラウンドで実行され、ダウンパフォーマンスはないと思っていましたが、行が長くなるにつれてtexteditorsはほとんど凍っています。 – FirmView

+1

どのリスナーをお使いですか?試してみてください。http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html – Balconsky

+0

私はdocumentListenerを実装していません。 – FirmView