使用线程每秒检查剪贴板

using Threads to check the clipboard each second

public class Checker implements Runnable {
    @Override
    public void run() {
        String s = "hello everyone this is the clipboard program";
        ClipBoard clipBoard = new ClipBoard();
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Clipboard clipboard = toolkit.getSystemClipboard();
        String result = null;
        try {
            result = (String) clipboard.getData(DataFlavor.stringFlavor);
            result= clipBoard.changeTheText(result);
        } catch (UnsupportedFlavorException e) {
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("String from Clipboard:" + result);
    }

}

我知道这可能只是线程的简单使用,但我不确定它是如何工作的。 我想每秒用一个 Thread 检查剪贴板,看看它是否已被用户更改。现在我可以打印一次我的剪贴板

ScheduledExecutorService 应该可以解决这个问题

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

scheduler.scheduleAtFixedRate(new Checker(), 1, 1, SECONDS);

这将 运行 你的 Checker 延迟 1 秒后,之后每秒。

你的 Checker class 是一个 Runnable,所以你可以 运行 它在 Thread 中这样做:

public static void main(String[] args) {
    Checker checker = new Checker();
    Thread thread = new Thread(checker);
    thread.start();
}

但是,这只会执行您的 run() 方法一次。如果你想定期执行它,你应该按照这样的结构重写它:

@Override
public void run() {
    try {
        while(true) {
            // ... your code here
            Thread.sleep(1000); // this will pause the thread for 1 second
        }
    } catch(InterruptedException e) {
    }
}

现在您的代码处于无限循环中,每秒都会执行一次。如果你想停止它,只需调用 thread.interrupt().