我想做的事情是,当用户在任何程序中复制文本(如firefox、记事本、pdf阅读器等),我的已经运行的Java应用程序将被通知并立即显示一个弹出窗口。
我认为为了能够做到这一点,当系统剪贴板更改时应该调用我的Java应用程序。
Java是否可以实现这一点?如果可以,在哪个版本中?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是当剪贴板内容更改时如何调用Java应用程序。
谢谢
我曾天真地以为这是JDIC的一项工作,但网络告诉了我真相。所以,让我解释一下。
使用Toolkit.getSystemClipboard()
,您可以访问原生系统剪贴板。像任何Java对象一样,此剪贴板可以被监听。确切地说,您可以调用Clipboard.addFlavorListener(...)
来监听FlavorEvents
。它们是什么?他们是金属之王!....不不不,我完全离题了。让我回来。因此,根据文档,FlavorEvent表示
剪贴板(事件源)中可用的DataFlavors已更改。
这可能意味着剪贴板内容发生了变化。但是,我不会在没有第一个原型的情况下直接使用它。
编辑来自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);
}
}