因为工作的需要,有时候会自己手动写一些简单的代码,辅助完成一些比较机械的事情!下面是我写一个利用Robot类完成复制粘贴合成文本的小程序,编译通过,也能运行,就是运行的结果是不可预期的,比如说,可能第一次完成了20次循环,但第二次再次运行的时候就只能完成10次循环就抛出Exception了!比较抓狂,与剪贴板的交互第一次用,实在不知道哪儿出错了!
我是在记事本里敲的代码,可能会比较乱,高手见谅,恳请大大们来指点下迷津!
import java.io.*;
import java.awt.datatransfer.*;
import java.awt.*;
import java.awt.event.*;public class DictRobot{
public static void main(String[] args){
try{
FileOutputStream dict = new FileOutputStream("output.txt",true);
OutputStreamWriter wDict = new OutputStreamWriter(dict,"Unicode");
BufferedWriter bufWDict = new BufferedWriter(wDict); Thread.sleep(5000); Robot dictRobot = new Robot();
for(int i=1;i<=3714;i++){ dictRobot.keyPress(KeyEvent.VK_F9);//F9快捷键完成复制
dictRobot.keyRelease(KeyEvent.VK_F9);// -------------------------------------------------------
//以下剪贴板代码是我从网上找的,不是很清楚其中的原理
//--------------------------------------------------------
Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable contents = clipBoard.getContents(clipBoard);//此处的参数原来是用this关键字的
DataFlavor flavor = DataFlavor.stringFlavor;
if( contents.isDataFlavorSupported(flavor)){
String str;
str=(String)contents.getTransferData(flavor);
System.out.println("i got here"+i);
bufWDict.write("##"+str+"\r\n");
}
dictRobot.keyPress(KeyEvent.VK_DOWN);//选择下一行
}
bufWDict.close();
wDict.close();
dict.close();
}
catch(FileNotFoundException e){System.out.println("File Not Found Error");}
catch(IOException e){System.out.println("IOException Error");}
catch(Exception e){System.out.println("Exception");}
}
}
我是在记事本里敲的代码,可能会比较乱,高手见谅,恳请大大们来指点下迷津!
import java.io.*;
import java.awt.datatransfer.*;
import java.awt.*;
import java.awt.event.*;public class DictRobot{
public static void main(String[] args){
try{
FileOutputStream dict = new FileOutputStream("output.txt",true);
OutputStreamWriter wDict = new OutputStreamWriter(dict,"Unicode");
BufferedWriter bufWDict = new BufferedWriter(wDict); Thread.sleep(5000); Robot dictRobot = new Robot();
for(int i=1;i<=3714;i++){ dictRobot.keyPress(KeyEvent.VK_F9);//F9快捷键完成复制
dictRobot.keyRelease(KeyEvent.VK_F9);// -------------------------------------------------------
//以下剪贴板代码是我从网上找的,不是很清楚其中的原理
//--------------------------------------------------------
Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable contents = clipBoard.getContents(clipBoard);//此处的参数原来是用this关键字的
DataFlavor flavor = DataFlavor.stringFlavor;
if( contents.isDataFlavorSupported(flavor)){
String str;
str=(String)contents.getTransferData(flavor);
System.out.println("i got here"+i);
bufWDict.write("##"+str+"\r\n");
}
dictRobot.keyPress(KeyEvent.VK_DOWN);//选择下一行
}
bufWDict.close();
wDict.close();
dict.close();
}
catch(FileNotFoundException e){System.out.println("File Not Found Error");}
catch(IOException e){System.out.println("IOException Error");}
catch(Exception e){System.out.println("Exception");}
}
}
catch(FileNotFoundException e){System.out.println("File Not Found Error");}
catch(IOException e){System.out.println("IOException Error");}
catch(HeadlessException e){System.out.println("鼠标键盘不支持 Error");}
catch(IllegalStateException e){System.out.println("剪贴板不可用 Error");}
catch(AWTException e){System.out.println("创建机器人 Error");}
catch(InterruptedException e){System.out.println("中断 Error");}
catch(UnsupportedFlavorException e){System.out.println("不支持请求的数据 flavor Error");}运行之后的异常提示,是“剪贴板不可用”,有高手指点下是怎么回事吗?是复制不到数据?还是WINDOWS系统的原因呀~~
抛IllegalStateException异常---可能“剪贴板”正在拷贝你复制的内容的操作还没有完成、你的程序就要求开始使用“剪贴板”获得拷贝的内容、解决办法是使用“线程同步”、拷贝完成激活另一线程取得“剪贴板”的内容