簡體   English   中英

Windows:發信號通知 Java 進程以顯示其 window

[英]Windows: signaling a Java process to show its window

我有一個在后台運行的 Java 進程。 如何快速發出信號以顯示其 window? 我想要一個真正輕量級的腳本,它可以做到這一點,並且可以從“開始”菜單啟動。

我想可能是一個 BAT 文件,它檢查鎖定文件是否在最后幾秒鍾內被觸摸,發出進程信號,否則,創建一個新文件。 信號可能是通過創建另一個進程將監聽的文件。

這行得通,但似乎效率低下。 猶豫聽起來是不可避免的。

我可以使用 Java 代替 BAT 文件,但仍然存在如何向后台進程發出信號的問題。 這只適用於 Windows,但我對 Java 很滿意,所以這就是我正在使用的。

有任何想法嗎?

一種選擇是讓該進程在端口(例如 8888)上具有偵聽器,然后您可以向該端口發送消息(或執行類似 telnet localhost 8888 的操作)。 正在運行的進程可以有一個單獨的線程在該端口上偵聽。

Another option would be to use JMX communication with the JVM - see http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html

是否有任何東西阻止您從 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 function? 在我對 MSDN 文檔非常有限的瀏覽中,僅在 sockets 的上下文中提到了這一點。 我知道 Linux 等效項適用於任何文件描述符。

與其簡單地在我上面提到的線程中輪詢文件,不如讓操作系統來做! 將文件傳遞到設置為selectwritefds中,然后在修改文件時返回。 這意味着您的進程不會花費寶貴的 CPU 時間來等待對文件的更改。

我還沒有驗證 Java 是否在 JDK 中公開了這個調用,所以它可能需要編寫一個 JNI 接口才能讓它工作。 我在這方面的知識有點模糊,對不起。

再次編輯:

找到了! Java 的選擇器 class 看起來像是實現select 不幸的是,FileChannel 是不可選擇的,這在這種情況下可能是必需的。 :(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM