使用线程每秒检查剪贴板

时间:2017-03-27 09:36:31

标签: java multithreading clipboard

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);
    }

}

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

2 个答案:

答案 0 :(得分:3)

ScheduledExecutorService应该在这里诀窍

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

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

这将在延迟1秒后运行Checker,之后每秒运行一次。

答案 1 :(得分:0)

您的Checker课程为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()