public static void addClipboardChangeListener(IClipboardChangeListener iClipboardChangeListener) {
// 获取剪贴板实例
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
// 创建监听线程
Thread clipboardThread = new Thread(() -> {
Transferable prevContents = clipboard.getContents(null);
while (true) {
try {
Thread.sleep(1000); // 每秒检查一次剪贴板变化
} catch (InterruptedException e) {
e.printStackTrace();
}
Transferable currentContents = clipboard.getContents(null);
if (!contentsEquals(prevContents, currentContents)) {
prevContents = currentContents;
String clipboardText = getClipboardText(currentContents);
System.out.println("剪贴板内容变化:" + clipboardText);
iClipboardChangeListener.change(clipboardText);
}
}
});
// 启动监听线程
clipboardThread.setDaemon(true);
clipboardThread.start();
// 保持程序运行
try {
Thread.sleep(Long.MAX_VALUE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 检查两个Transferable对象是否相等
private static boolean contentsEquals(Transferable t1, Transferable t2) {
if (t1 == null || t2 == null) {
return t1 == t2;
}
try {
return t1.getTransferData(DataFlavor.stringFlavor).equals(t2.getTransferData(DataFlavor.stringFlavor));
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
// 获取剪贴板文本内容
private static String getClipboardText(Transferable transferable) {
if (transferable != null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
return (String) transferable.getTransferData(DataFlavor.stringFlavor);
} catch (Exception e) {
e.printStackTrace();
}
}
return "";
}
public interface IClipboardChangeListener {
void change(String str);
}