当剪贴板内容在java之外发生更改时,是否可以得到通知

当剪贴板内容在java之外发生更改时,是否可以得到通知,java,swing,clipboard,Java,Swing,Clipboard,我想做的事情是,当用户在任何程序(firefox、记事本、pdfReader等)中复制文本时,我已经运行的java应用程序将被通知,并立即显示一个弹出窗口 我认为,为了能够做到这一点,应该在系统剪贴板发生更改时调用java应用程序 java是否可以实现这一点?如果可以,在哪个版本中?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是关于调用java应用程序。当剪贴板内容更改时 谢谢我会天真地假装这是JDIC的工作,但interwebz告诉了我真相。让我解释一下 使用,您可以访问本机系统剪贴

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

我认为,为了能够做到这一点,应该在系统剪贴板发生更改时调用java应用程序

java是否可以实现这一点?如果可以,在哪个版本中?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是关于调用java应用程序。当剪贴板内容更改时


谢谢

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

使用,您可以访问本机系统剪贴板。与任何Java对象一样,可以监听此剪贴板。确切地说,你可以打电话来听。它们是什么。。。。不,不,我完全离题了。让我回来。因此,根据文档,一个事件表明

剪贴板(事件源)中的可用数据样式已更改

这可能意味着剪贴板内容已更改。然而,如果没有第一个原型,我不会直接进行

编辑来自用户手指的原型示例


有趣,但是如果内容发生变化而DataFlavors没有发生变化,这会引发问题吗?这就是为什么我说必须制作一个原型:-)这不是一个经过验证的解决方案,只是一个最简单的解决方案的提示。我刚刚试过这个,这个真的很有效!谢谢,@Riduidel!这是我的代码:publicstaticvoidmain(String[]args)抛出异常{Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(新的FlavorListener(){@Override publicsvoidFlavorSchanged(FlavorEvent e){System.out.println(“changed!!!”+e.getSource()+“”+e.toString());});Thread.sleep(100000L);}这种方法仅在每次从应用程序复制一次时有效。如果在同一个应用程序中再复制一次,则As Flavor事件不会更改。通过剪贴板所有者更改进行监视将更加可靠。以下是详细信息:如果复制具有相同风格的新数据,则此操作不起作用。
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); 
    }
}