0

特定のフォルダーの変更を監視する「folderwatcher」という名前のクラス(呼び出し可能)を定義しました。メインコードは、次のような無限ループにあります 。Javaを使用してディレクトリの変更を監視します。この「folderwatcher」を呼び出すメソッド/クラスが、「folderwatcher」によって検出されたイベントをリッスンし、イベントに基づいていくつかの操作を実行するようにします。誰かが私がこれを行う方法を知っていますか?イベントハンドラーは必要ですか?例はありますか?ありがとう

4

2 に答える 2

3

まず第一に、無限ループ アプローチを使用するのは間違っています。本当に使用しているCallable 場合は、すでに使用していExecutorServiceます。使用する必要があるのは でScheduledExecutorService、コードを繰り返しタスクとしてスケジュールします。

イベント ハンドラーに関しては、これを達成するのは難しくありません。次に例を示します。

interface FileDetectedHandler { void fileDetected(File f); }

public static void main(String[] args) {
  final ScheduledExecutorService scheduler = 
     Executors.newSingleThreadScheduledExecutor();
  final FileDetectedHandler h = new FileDetectedHandler(File f) {
    public void fileDetected(File f) {
      System.out.format("File detected: %s\n", f);
  }};
  final Runnable r = new Runnable() { public void run() {
    File f = null;
    //detect file
    if (f != null) h.fileDetected(f);
  }};
  scheduler.scheduleWithFixedDelay(r, 0, 2, TimeUnit.SECONDS);
}
于 2012-08-22T09:36:44.757 に答える
0

コールバックを使用します。これは、親オブジェクトに同期メソッドを実装し、親オブジェクトへの参照を実行可能なオブジェクトのコンストラクターに渡すことによって実行できます。その後、ランナブルは親のメソッドを呼び出して、親に何かを通知できます。

http://en.wikipedia.org/wiki/Callback_(computer_programming )

于 2012-08-22T09:31:51.577 に答える