我正在編寫一個程序來偵聽系統剪貼板中的更改。偵聽器在單獨的線程上運行,並在剪貼板的內容發生更改時執行一些操作(例如寫入文件)。Java線程在沒有專注於OSX時進入睡眠狀態
我在使用ClipboardOwner interface輪詢剪貼板,以便當我的程序失去剪貼板的所有權(意味着另一個進程修改了剪貼板)時,在我的程序中觸發一個事件讓我讀取更改。
public class OwnershipClipboardListener extends Thread implements ClipboardOwner
{
private Clipboard clipB = Toolkit.getDefaultToolkit().getSystemClipboard();
public void run()
{
/* Initialize ClipboardListener and gain ownership of clipboard */
}
@Override
public void lostOwnership(Clipboard clipboard, Transferable transferable)
{
/* Auto-fired when I lose Clipboard ownership.
Can do processing and regaining ownership here */
}
}
的問題是,在OSX上運行時,到剪貼板的任何變化被反映僅如果我手動Cmd的-Tab鍵以在船塢內的正在運行的進程圖標。因此,如果在切換到停靠欄圖標之前存在多個剪貼板操作,則只有最後一個纔有效。我不在Linux或Windows上面對這個問題。
這就像線程在程序失去焦點時進入睡眠狀態,但最後一個事件觸發器在喚醒時仍然會觸發。有什麼辦法可以預防這種睡眠嗎?
帖子[這](HTTP:// stackoverflow.com/questions/4402001/cant-copy-to-a-clipboard-from-a-background-java-application-on-mac-osx「)和[this](http://stackoverflow.com/questions/ 7717824/cant-monitor-system-clipboard-changes-from-a-background-java-application-on-mac)請參閱m有類似的問題,但在大多數情況下,他們的剪貼板是做數據傳輸的一種解決方法。我實際上需要一直在閱讀剪貼板。 – 2012-04-06 04:58:38