0

バックグラウンドで実行される Java プロセスがあります。ウィンドウを表示するようにプロセスにすばやく通知するにはどうすればよいですか? これを実行でき、[スタート] メニューから起動できる、非常に軽量なスクリプトが必要です。

ロックファイルが最後の数秒間に触れられたかどうかをチェックするBATファイルがプロセスにシグナルを送るか、そうでない場合は新しいプロセスを作成する可能性があると思います。シグナルは、プロセスがリッスンする別のファイルを作成することによって発生する可能性があります。

それは機能しますが、非効率的です。ためらいは避けられないように聞こえます。

BAT ファイルの代わりに Java を使用することもできますが、それでもバックグラウンド プロセスにどのようにシグナルを送るかという問題が残ります。これは Windows でのみ機能する必要がありますが、私は Java が得意なので、Java を使用しています。

何か案は?

4

2 に答える 2

3

1 つのオプションは、そのプロセスがポート (例として 8888) にリスナーを持つようにすることです。その後、そのポートにメッセージを送信できます (または telnet localhost 8888 のようなことを行います)。実行中のプロセスは、そのポートでリッスンする別のスレッドを持つことができます。

もう 1 つのオプションは、JVM との JMX 通信を使用することです。http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html を参照してください

于 2011-06-08T16:53:06.270 に答える
1

Java プロセスからロック ファイルをチェックするのを妨げているものはありますか? オブザーバー パターンを使用して、メイン スレッド (またはいずれかのスレッド) にファイルの変更を警告できます。

例えば:


public class FileWatcher implements Observable {

  private long lastModified;
  private final File file;

  public FileWatcher(File f) {
     this.file = f;
     this.lastModified = file.lastModified();

     Thread t = new Thread() {
        public void run() {
           while(!stopThread) {
           if(lastModified < file.lastModified()) {
              lastModified = file.lastModified();
              setChanged();
              notifyObservers();

           }    
           Thread.currentThread().sleep(5);      
           }
        }
     };

     t.start();
  }
}

免責事項: まったくテストも検証もされていませんが、その考えは理解できると思います。

編集:おっと、ループを忘れました。

編集:新しいアイデア。

私には別の考えがあります。(すでに回答を受け入れていることは知っていますが、これを捨てたかったのです。)このselect機能を使用することは可能ですか?MSDN ドキュメントの私の非常に限られたスキムでは、これはソケットのコンテキストでのみ言及されています。Linux に相当するものは、どのファイル記述子にも適用できることを知っています。

上記のスレッドで単にファイルをポーリングする代わりに、OS に任せてください。writefdsファイルをセットに渡すselectと、ファイルが変更されたときに返されます。これは、プロセスがファイルへの変更を待っている貴重な CPU 時間を消費していないことを意味します。

Java がこの呼び出しを JDK で公開しているかどうかはまだ確認していないため、動作させるには JNI インターフェースを作成する必要があるかもしれません。この分野に関する私の知識は少しあいまいです、申し訳ありません。

もう一度編集します。

それを見つけた!Java の Selector クラスは を実装しているように見えますselect。残念ながら、FileChannel は選択できません。この場合はおそらく必要です。:(

于 2011-06-08T17:07:54.163 に答える