我想做的是,当用户在任何程序(firefox、记事本、pdfReader 等)中复制文本时,我已经运行的 java 应用程序将收到通知并立即显示弹出窗口。
我认为为了能够做到这一点,只要系统剪贴板发生更改,就应该调用我的java应用程序。
java 可以吗?如果可以的话,在哪个版本?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是关于调用 java 应用程序。当剪贴板内容发生变化时。
Thanks
我会天真地假装这是 JDIC 的工作,但 interwebz 告诉了我真相。那么,让我解释一下。
using Toolkit.getSystemClipboard() http://download.oracle.com/javase/1.5.0/docs/api/java/awt/Toolkit.html#getSystemClipboard(),您可以访问本机系统剪贴板。与任何 Java 对象一样,可以监听此剪贴板。具体来说,你可以打电话Clipboard.addFlavorListener(...) http://download.oracle.com/javase/1.5.0/docs/api/java/awt/datatransfer/Clipboard.html#addFlavorListener(java.awt.datatransfer.FlavorListener)听FlavorEvents http://download.oracle.com/javase/1.5.0/docs/api/java/awt/datatransfer/FlavorEvent.html。这些是什么 ?他们是金属之王! http://en.wikipedia.org/wiki/Kings_of_Metal....不不不,我完全离题了。让我回来吧。因此,根据文档,FlavorEvent 表明
剪贴板(事件源)中的可用 DataFlavors 已更改。
Which may意味着剪贴板内容已更改。然而,如果没有第一个原型,我不会直接进行下去。
EDIT来自手指的原型示例AlexR https://stackoverflow.com/users/478399/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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)