当我在互联网上研究东西时,我喜欢复制并粘贴某些段落,以便稍后查看。
我正在尝试编写一个程序,该程序会不断检查剪贴板中的文本内容,并在任何续订时将其写入文本文件。
在下面的程序测试中,我在运行程序之前在我的剪贴板中有“公共类剪贴板”,当我从netbeans复制文本时发生异常(我用来运行程序运行时:
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class TestClipboard {
public static void main(String[] args) {
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
String initial = "";
while(true) {
try {
String paste = c.getContents(null).getTransferData(DataFlavor.stringFlavor).toString();
if(!paste.equals(initial)) {
System.out.println(paste);
initial = paste;
}
} catch (UnsupportedFlavorException | IOException ex) {
Logger.getLogger(TestClipboard.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
输出:
public class TestClipboard
Exception in thread "main" java.lang.IllegalStateException: cannot open system clipboard
at sun.awt.windows.WClipboard.openClipboard(Native Method)
at sun.awt.datatransfer.ClipboardTransferable.<init>(ClipboardTransferable.java:78)
at sun.awt.datatransfer.SunClipboard.getContents(SunClipboard.java:144)
at delete.TestClipboard.main(TestClipboard.java:21)
Java Result: 1
建立成功(总时间:34秒)
为什么不能打开系统剪贴板?
getSystemClipboard()方法是否没有全局范围? - 换句话说,如果在互联网浏览器中执行复制操作,是否可以获取剪贴板的内容?
答案 0 :(得分:1)
您似乎正在尝试从剪贴板读取,而另一个进程正在更新(或某些此类)。
我修复:
Clipboard
的实例Thread.sleep
while-loop
醇>
例如......
public class TestClipboard {
public static void main(String[] args) {
String initial = "";
while (true) {
try {
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
String paste = c.getContents(null).getTransferData(DataFlavor.stringFlavor).toString();
if (!paste.equals(initial)) {
System.out.println(paste);
initial = paste;
}
} catch (UnsupportedFlavorException | IOException ex) {
Logger.getLogger(TestClipboard.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Thread.sleep(40);
} catch (InterruptedException ex) {
}
}
}
}
应该注意的是,它不会阻止它发生,它只会减少发生的次数。当它被抛出时,你可以(只是)忽略并再试一次......