本人坐了个程序想读取系统剪切板上的文字,如下
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的第一次循环中,不会报错,只有程序运行到第二次或者第三次的时候出错,并且不确定具体出错的循环次数。似乎是改变过系统剪贴板内容后,再读取就会出错?
  哪位大虾,能给点指导,谢谢