My Swingアプリケーションには、外部ソースからデータを取得するときに読み込まれるテーブルがあります。表示された結果が正しいとすべてがCPU使用率が100%であることを細かい間隔で動作しますSwingWorker:CPU使用率100%!
// SwingWorker Thread
private class DisplayRowsTask extends SwingWorker<Void, Object[]> {
private Vector<String[]> _data;
@Override
protected Void doInBackground() {
while (_continue && !hasError()) {
// some logic to fetch and place data in _data
// data adjustment
for (String[] row : _data) publish (row);
_data = new Vector<String[]>();
}
return null;
}
@Override
protected void process(List<Object[]> rows) {
for (Object[] row : rows) ((DefaultTableModel)_table.getModel()).addRow(row);
}
}
:データを表示するには、私はこの方法でデータをフェッチすることになっているスレッドから呼び出されたSwingWorkerのスレッドを使用しています(そして以上!)特に多くのデータが頻繁に取得される状況では、この使用法をどのように制限できますか?
別の質問が完全に関連していない可能性があります。データがテーブルに表示されているかどうかをどのように知ることができますか?メソッド「SwingWorker.isDoneは、()」あなたはぼんやりとrun()
でwhile (!task.isDone());
をループしているので、あなたのCPUは当然100%、に上がっているこの情報
本当にSwingWorkerのドキュメントを読んでください。メインスレッドは、SwingWorkerのいくつかのインスタンスをループして作成する必要はありません。 SwingWorkerはループし、テーブルを段階的かつ非同期的に移入する必要があります。メインスレッドではなく、データをフェッチする必要があるバックグラウンドスレッドです。 –
ありがとう私は自分のコードを再編集しましたが、私はまだ100%のCPUを持っています。 – Randomize
すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –