当剪贴板内容在Java之外发生变化时,是否可以被告知

2022-09-03 15:43:13

我想做的是,当用户在任何程序(firefox,记事本,pdfReader等)中复制文本时,我已经运行的java应用程序将被告知并立即显示弹出窗口。

我认为为了能够做到这一点,每当系统剪贴板发生变化时,都应该调用我的java应用程序。

这在java中是否可能,如果是这样,在哪个版本中?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是,当剪贴板内容发生变化时,调用java应用程序。

谢谢


答案 1

我会天真地假装这是JDIC的工作,但interwebz告诉我真相。所以,让我解释一下。

使用 Toolkit.getSystemClipboard(),您可以访问本机系统剪贴板。像任何Java对象一样,可以监听此剪贴板。准确地说,你可以调用Clipboard.addFlavorListener(...)来收听FlavorEvents。它们是什么?他们是金属之王!....不不不不,我完全和彻底地离题了。让我回来吧。因此,根据文档,FlavorEvent表明

剪贴板(事件源)中的可用数据耗材已更改。

可能意味着剪贴板内容已更改。但是,如果没有第一个原型,我不会直接使用它。

编辑AlexR手指上的原型示例

import java.awt.Toolkit;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;

public class Main {
    public static void main(String[] args) throws Exception { 
        Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener() { 
            @Override 
            public void flavorsChanged(FlavorEvent e) { 
                System.out.println("changed!!! " + e.getSource() + " " + e.toString()); 
            } 
        }); 
        Thread.sleep(100000L); 
    }
}

答案 2

推荐