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

dds*_*dds 15 java clipboard swing

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

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

这有可能与java,如果是这样在哪个版本?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是关于调用java应用程序.剪贴板内容更改时.

谢谢

Rid*_*del 9

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

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

可用的DataFlavor在剪贴板(事件源)中已更改.

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

编辑来自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); 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 此方法仅在从应用程序一次复制一次时起作用.如果在同一个应用程序中再复制一次Flavor事件将不会更改.通过剪贴板所有者更改进行监控将更加可靠.以下是详细信息:http://stackoverflow.com/questions/5484927/listen-to-clipboard-changes-check-ownership (4认同)
  • 我刚试过这个,这确实有效!谢谢,@ Riduidel!这是我的代码:public static void main(String [] args)throws Exception {Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener(){@Override public void flavorsChanged(FlavorEvent e){System.out.println ("改变!!!"+ e.getSource()+""+ e.toString());}}); 了Thread.sleep(100000L); } (2认同)