Windows 7 の検索プログラムを修正して、一致したファイルをJTable
. これの前に、私はに書いていましたJTextArea
。出力は醜いものでした。したがって、JTable
出力します。しかし、JTable
何千ものファイルを検索すると、プログラムが応答しなくなることがあります。(そうではありませんJTextArea
。非常に滑らかです。)
私の質問は、応答性を改善する方法です。
Thread
特定のノードから呼び出されmain
、「ファイルツリーをたどる」ものがあります。
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
gui = new GUI();
Utilities.disable(GUI.btnStop);
}});
t = new Thread(new TASK());
taskStarted = false;
}
}
のクラス ヘッダーは次のTASK
とおりです。
public class TASK extends SimpleFileVisitor<Path> implements Runnable{
ここにありrun
ます:
public void run()
{
SearchyGUI.disposition = FileVisitResult.CONTINUE;
Files.walkFileTree(path , this);
}
ツリー ウォーキングのメイン ルーチンは次のとおりです (他に 3 つのルーチンがあり、1 つはディレクトリの処理用、1 つはディレクトリの後処理用、もう 1 つはエラー用です)。
public FileVisitResult visitFile(Path f, BasicFileAttributes a) throws IOException {
if(a.isSymbolicLink())
return SearchyGUI.disposition;
File file = new File(f.getParent().toString(), f.getFileName().toString());
try
{
if(f.getFileName().toString().toLowerCase().matches(fPatt.toLowerCase().trim())
report(s);
} catch (MalformedURLException | SAXException | TikaException ex) {msgbox(ex.toString());}
return SearchyGUI.disposition;
}
一致したファイルとその情報は次のファイルに書き込まれますJTable
:
private static void report(...){
ArrayList<String> rowData = new ArrayList<>(4);
rowData.add(date);
rowData.add(size);
rowData.add(filename);
rowData.add(path);
dftTableModel.addRow(new Object[]{rowData.get(0),rowData.get(1),rowData.get(2),rowData.get(3)});
}
catch (Exception e)
{
SearchyGUI.disposition = FileVisitResult.TERMINATE;
}
}
Thread
応答性を向上させるために、への書き込みに別のものが必要なのか、JTable
それとも を使用する必要があるのかわかりませんSwingWorker
。いずれにせよ、実装方法がわかりません。
Thread
別のことを仮定すると、report
メソッドをクラスに変換しimplements Runnable
ますか? 実装を視覚化するのに問題がありますが、必要に応じて理解できるでしょう。
私はかつてこのプログラムで をSwingWorker
、おそらく間違って ( なしで) 使用していました。Thread
出力エリアがひっきりなしに点滅したので諦めました。だから私はその道を行くことに熱心ではありませんが、もしお勧めであれば考えてみます。
質問が「意見」の領域に該当するとは思いません。応答性を改善する方法についてアドバイスが必要です。誰かが事前にエラーを指摘できるのであれば、間違った道を進みたくないだけです。