Java剪贴板可用性
当我在互联网上研究东西时,我喜欢复制和粘贴某些段落,这样我以后就可以回顾它们了 我正在尝试编写一个程序,该程序将持续检查剪贴板中的文本内容,并在更新时将其写入文本文件 在下面的程序测试中,在运行程序之前,我的剪贴板中有“public class Clipboard”,当程序运行时,我从netbeans(用于运行程序的IDE)复制文本时发生异常:Java剪贴板可用性,java,netbeans,clipboard,Java,Netbeans,Clipboard,当我在互联网上研究东西时,我喜欢复制和粘贴某些段落,这样我以后就可以回顾它们了 我正在尝试编写一个程序,该程序将持续检查剪贴板中的文本内容,并在更新时将其写入文本文件 在下面的程序测试中,在运行程序之前,我的剪贴板中有“public class Clipboard”,当程序运行时,我从netbeans(用于运行程序的IDE)复制文本时发生异常: import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java
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
公共类测试剪贴板
线程“main”java.lang.IllegalStateException中出现异常:无法打开系统剪贴板
位于sun.awt.windows.WClipboard.openClipboard(本机方法)
在sun.awt.datatransfer.ClipboardTransferable.(ClipboardTransferable.java:78)
位于sun.awt.datatransfer.sunciplater.getContents(sunciplater.java:144)
位于delete.TestClipboard.main(TestClipboard.java:21)
Java结果:1
生成成功(总时间:34秒)
为什么它不能打开系统剪贴板
getSystemClipboard()方法是否没有全局作用域?-换句话说,如果复制操作是在internet浏览器中执行的,我能否获取剪贴板的内容 当另一个进程正在更新剪贴板(或类似进程)时,您似乎正在尝试从剪贴板中读取 我的修正案如下:
剪贴板的实例
线程.sleep
添加到while循环中
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) {
}
}
}
}
应该注意的是,它不会阻止它的发生,它只会减少发生的次数。当它被抛出时,你可以(忽略)忽略和重试……/p>而不是垃圾邮件剪贴板,考虑添加<代码>线程。你有什么特别的理由选择40毫秒作为睡眠时间吗?不完全是,通常用于动画(25帧/秒);)