java.lang.IllegalStateException:cannot open system clipboard

luc_cj 2007-11-21 12:09:37
本人坐了个程序想读取系统剪切板上的文字,如下
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的第一次循环中,不会报错,只有程序运行到第二次或者第三次的时候出错,并且不确定具体出错的循环次数。似乎是改变过系统剪贴板内容后,再读取就会出错?
  哪位大虾,能给点指导,谢谢
...全文
1225 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1

在每次循环的时候,加一个Thread.sleep就可以解决该问题,可能是不允许太快的写缓存或者读缓存

sunny2603 2010-11-23
  • 打赏
  • 举报
回复
靠,没看时间,日~~
sunny2603 2010-11-23
  • 打赏
  • 举报
回复
遇到同样的问题,坐等高手回答

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧