java.lang.IllegalStateException:cannot open system clipboard
本人坐了个程序想读取系统剪切板上的文字,如下
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import java.awt.event.InputEvent;
import javax.swing.*;
import mypackage.*;
public class auto_move {
public auto_move() throws Exception{
//初始化,定义所有结构体
//定义读取系统剪贴板相关的结构体
Clipboard clip;
Transferable clipT;
readClipboard a = new readClipboard();
。。。
while(true){
。。。
//将节点名读入系统剪贴板
re.read_name();
//读取系统剪贴板
clip = Toolkit.getDefaultToolkit().getSystemClipboard();
clipT = clip.getContents(this);
node_name = a.readClip(clipT);
Toolkit.getDefaultToolkit().getSystemClipboard();
//读取第一个树枝的描述
。。。
}
}
}
public class readClipboard
{
public String readClip(Transferable clipT) throws Exception{
// 获取剪切板中的内容
if (clipT != null) {
// 检查内容是否是文本类型
if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor)) {
String w = clipT.getTransferData(DataFlavor.stringFlavor).toString();
System.out.println(w);
return w;
} else return null;
}else return null;
}
}
运行后,会报错,如下:
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:61)
at sun.awt.datatransfer.SunClipboard.getContents(SunClipboard.java:130)
at mypackage.auto_move.<init>(auto_move.java:41)
at autoseq.main(autoseq.java:21)
奇怪的是
在while的第一次循环中,不会报错,只有程序运行到第二次或者第三次的时候出错,并且不确定具体出错的循环次数。似乎是改变过系统剪贴板内容后,再读取就会出错?
哪位大虾,能给点指导,谢谢