ディレクトリに含まれる各ファイル内の単語を検索するアプリケーションを作成しました。検索を停止する方法を実装したかったのです。ディレクトリで見つかった各ファイルの種類に応じて、他のさまざまなメソッドを呼び出すメソッドを作成しました。私は1つのクラスで働いており、JButton
そのリクエスト停止検索を作成しました:
private void jButtonActionPerformed(java.awt.event.ActionEvent evt)
{
System.out.println("Requesting stop");
}
ディレクトリを検索するメソッドを停止する方法が必要です。私のメソッドがsearch(directory);
.
私はこのようにしようとしsearch(directory);
ました:
private Thread a;
a = new Thread(new Runnable() {
@Override
public void run() {
search(directory);
}
}
);
検索中に をクリックしjButton
て検索を停止します。
private void jButtonActionPerformed(java.awt.event.ActionEvent evt)
{
System.out.println("Requesting stop");
a.stop();
}
それは機能しますが、これに関する多くの投稿を読んでいますが、スレッドを停止するのは良い方法ではありません. では、代替案はありますか?例を挙げていただけますか?
私もこれを試しました:
java.util.TimerTask timerTask;
ScheduledThreadPoolExecutor scheduledThread = new ScheduledThreadPoolExecutor(10);
timerTask = new java.util.TimerTask() {
@Override
public void run() {
search(directory);
}
};
scheduledThread.schedule(timerTask, 3, TimeUnit.MILLISECONDS);
そして次にjButtonActionPerformed
:
private void jButtonActionPerformed(java.awt.event.ActionEvent evt)
{
System.out.println("Requesting stop");
scheduledThread.shutdownNow();
}
それも機能しますが、この場合、新しい検索を開始しようとしても開始できません。アプリケーションを閉じて再度開く必要があります。