2012-04-17 32 views
9

Tôi đang gặp khó khăn nhận được dữ liệu từ bộ nhớ tạm hệ thống trên Mac OS X. Những gì tôi đang cố gắng làm là để nghe vào clipboard hệ thống và in nội dung của clipboard mỗi lần mới [dựa trên văn bản] thông tin đưa vào nó.Theo dõi Clipboard trên Mac OS X | Java

Vấn đề: mã dưới hoạt động hoàn toàn tốt trên Windows 7 và máy Linux openSUSE, tuy nhiên khi tôi thử chạy cùng một mã trên Mac OS X, chương trình không in được nội dung mới của bảng tạm cho đến khi tập trung được đưa vào ứng dụng . [Không có gì được in cho đến khi tôi nhấp vào biểu tượng ứng dụng trên dock ...]

mã nguồn của tôi:

import java.awt.Toolkit; 
import java.awt.datatransfer.*; 
import java.io.IOException; 

public class ClipboardListener extends Thread implements ClipboardOwner { 

    Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 

    public void run(){ 
     Transferable selection = systemClipboard.getContents(this); 
     gainOwnership(selection); 
    } 

    public void gainOwnership(Transferable t){ 
     try {this.sleep(100);} 
     catch (InterruptedException e) {e.printStackTrace();} 
     systemClipboard.setContents(t, this); 
    } 

    public void lostOwnership(Clipboard clipboard, Transferable contents) { 
     try {System.out.println((String) clipboard.getData(DataFlavor.stringFlavor));} 
     catch (UnsupportedFlavorException e) {} 
     catch (IOException e) {} 
     gainOwnership(contents); 
    } 
} 

public class myApp { 

    public static void main(String[] args){ 
     ClipboardListener listener = new ClipboardListener(); 
     listener.start(); 
     while(true){}} 

} 

Những gì tôi đang mất tích/làm sai?

[Cập nhật] tôi thấy vấn đề tương tự được đăng ở đây: Java thread goes to sleep when not in focus on OSX Tuy nhiên bằng cách sử dụng lệnh "java -jar myApp.jar &" đã không làm việc như một cách giải quyết cho tôi.

+0

Bạn đã tìm ra cách giải quyết cho vấn đề này chưa? Tôi cũng cần điều tương tự. –

+0

Thật không may, không. –

Trả lời