2011-03-21 10 views
0

私はJnotifyを使ってアプリを書いています。 (JNotifyは、ファイルの変更を検出するためのライブラリです。)ファイルを無視するJnotifyを使用して変更する

アプリは、以下のコンポーネントがあります。

  1. ファイルに書き込み、ファイルライターX

  2. JNotifyを使用して、ファイルウォッチャー(作成します)ファイルXを監視する

  3. ユーザーが要求するファイルXに書き込む外部アプリ(メモ帳など)。

私はJNotifyがXは3を使用して変更されるだけ通知をトリガするために、及び1を介して修飾されたときに無視する(または少なくとも1及び3を介して変更を区別)します。

私はそれを行うことができる簡単な方法はありますか? 1つの方法は、ファイルライターが書き込むときに切り替えられる同期変数を持つことですが、これはあまりエレガントではないと感じています。

答えて

1

いずれにしても、一時的に2を無効にするには、1 + 2との間に何らかの通信が必要です(3の場合、そうする方法はありません)。もちろん、1 + 2が同じJVMで実行されている場合、共通の変数でいくつかの状態を共有するのがより効果的です。

あなたは他のスマートなコミュニケーション方法を考えるかもしれません。 1つは私の頭に浮かぶ:1が書き始める前に、ロックファイルが生成され、2も書き込まれる。書き込みが完了してからロックファイルが1から削除されると、2は、abutロックファイルの削除が通知された後もファイルをリッスンし続けることができます。

+0

ロックファイルは良い考えです。ただし、1がロックファイルを作成し、ロックファイルを作成して削除すると、2に十分な時間がないことがあります。ロックファイルを削除する前に 'Thread.sleep(1000)'を使っています。 – Jus12

+0

ファイルに書き込むときは3を制御できませんが、1が実行されているときはファイルをロックする必要があります。ファイルをロックできず、さらに3を制御できない場合は、常に1 + 3の競合状態の可能性があります。 – PeterMmm

0

Iオプション1

  • (Iは、選択されたオプションと共に、以下に説明する)は、2つの異なる方法を試した:1.場合により真にトグルされる共有ブール変数(すなわち、ロック)を使用しこの変数は真ですが、3は書きませんが、代わりに偽に設定されます)。

  • オプション2:ファイルの共有SHA1ハッシュを使用します。 writer(1)は、ファイルを書き込むたびにハッシュを更新します。 watcher(2)は、変更されたファイルのハッシュをチェックし、ハッシュが共有ハッシュと一致するかどうかを無視します。

オプション2を使用することにしました。これは完全に機能しました。オプション1を使用すると、すべての変更されたファイルと同様に、JNotifyがの2つの更新(異常)をトリガーします。

関連する問題