日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java中Robot

發(fā)布時(shí)間:2024/1/23 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中Robot 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
用者本身這個(gè)系統(tǒng)事件,或根據(jù)使用者的需要(例如程序需要自動(dòng)展示一些功能等)來(lái)控制鼠標(biāo)或鍵盤。?

在?Robot?這個(gè)類中產(chǎn)生的事件有別于在AWT元件中的事件,在AWT?元件中的事件(例如?MouseEvent、KeyEvent等)會(huì)被放置在?AWT的事件隊(duì)列中等候處理。但您用?Robot?這個(gè)類別所產(chǎn)生的事件,則會(huì)被放置在操作系統(tǒng)的事件隊(duì)列中等候處理。例如,當(dāng)你用了?Robot?中的?Robot.mouseMove()?這個(gè)方法,就表示真的讓您的鼠標(biāo)移動(dòng)了,而不像?AWT?事件中只是產(chǎn)生鼠標(biāo)移動(dòng)的事件而已。?

在這里要注意的是,由于?Robot?產(chǎn)生了一些較低階的控制,所以一旦當(dāng)前系統(tǒng)不允許您從事這些控制時(shí),就會(huì)發(fā)出?AWTException?這個(gè)例程來(lái)通知您。? </ td > ? < td?width = " 267 " ?align = " right " > ? </ td > ? </ tr > ? </ table > ?
import ?java.awt. * ;?
import ?java.awt.event. * ;?
public ? class ?example1? ... {?
Robot?robot
=null;?
void?initial()?...{?
try?...{?
//?產(chǎn)生一個(gè)?Robot?類別的物件?
robot?=?new?Robot();?
}
catch?(AWTException?ex)?...{}?
}
?

void?start()?...{?
//?一開始希望鼠標(biāo)移動(dòng)到的座標(biāo)?
int?initX?=?30,?initY?=?10;?
//然后希望移動(dòng)到的鼠標(biāo)座標(biāo)?
int?disX?=?120,?disY?=?20;?
//?目前鼠標(biāo)的位置座標(biāo)?
int?mouseX,?mouseY;?
mouseX?
=?initX;?
mouseY?
=?initY;?
//?延遲了?3?秒鐘?
robot.delay(3000);?
//?移動(dòng)到?左上角第一個(gè)圖標(biāo)的位置?
robot.mouseMove(30,10);?
//?鼠標(biāo)按下了鼠標(biāo)右鍵?
robot.mousePress(InputEvent.BUTTON3_MASK);?
//?鼠標(biāo)放開所按下的右鍵?
robot.mouseRelease(InputEvent.BUTTON3_MASK);?
//?停留?1?秒鐘?
robot.delay(1000);?
//?鼠標(biāo)移動(dòng)到“打開”的位置?
for(int?i?=?0?;?mouseX?<?disX?;?i++)?...{?
mouseX?
=?mouseX?+?i;?
robot.mouseMove(mouseX,?mouseY);?
robot.delay(
50);?
}
?

for(int?j?=?0?;?mouseY?<?disY?;?j++)?...{?
mouseY?
=?mouseY?+?j;?
robot.mouseMove(mouseX,?mouseY);?
robot.delay(
50);?
}
?
//?停留?1?秒鐘后按下左鍵?
robot.delay(1000);?
robot.mousePress(java.awt.event.InputEvent.BUTTON1_MASK);?
robot.mouseRelease(InputEvent.BUTTON1_MASK);?
}
?
public?static?void?main(String[]?args)?...{?
example1?ex
=new?example1();?
ex.initial();?
ex.start();?
System.exit(
0);?
}
?
}
?

在Robot類中有一個(gè)比較特殊的method:?
BufferedImage?createScreenCapture(Rectangle?screenRect)?
顧名思義,當(dāng)我們使用這個(gè)這個(gè)method?時(shí),就會(huì)建立一張影像,而這張影像中存的的則是我們從屏幕擷取出來(lái)的像素(pixel)。而使用這個(gè)method,就會(huì)傳回一個(gè)BufferedImage類的對(duì)象,我們可以根據(jù)我們的需要來(lái)對(duì)它進(jìn)行處理。下面是個(gè)簡(jiǎn)單的范例,在這個(gè)范例中,程序會(huì)在使用者希望停留的秒數(shù)鐘后截取屏幕,并將文件用jpg格式保存。?
/**/ /*?
*?@(#)ScreenCapture.java?2001/09/24?
*?Usage:?java?ScreenCapture?[-d?seconds]?[-f?filename]?
*?@Author?
*?Cheng-Yu?Chang?
*?@License?
*?GPL(GNU?GENERAL?PUBLIC?LICENSE)?
*?
http://www.gnu.org/copyleft/gpl.html?
*/
?
import ?java.awt. * ;?
import ?java.awt.image. * ;?
import ?java.io. * ;?
import ?com.sun.image.codec.jpeg.JPEGCodec;?
import ?com.sun.image.codec.jpeg.JPEGImageEncoder;?
public ? class ?ScreenCapture? ... {?
public?static?void?ScreenCapture(int?seconds,?String?filename)?...{?
Robot?robot?
=?null;?
//?產(chǎn)生?Robot?物件,記著要?catch?AWTException?
try?...{?
robot?
=new?Robot();?
//?延遲使用者輸入的秒數(shù)?
robot.delay(seconds);?
//?將截取的image轉(zhuǎn)換成jpg格式?
OutputStream?f?=?new?FileOutputStream(filename);?
JPEGImageEncoder?encoder?
=?JPEGCodec.createJPEGEncoder(f);?
encoder.encode(robot.createScreenCapture(
new?Rectangle(Toolkit.getDefaultToolkit().getScreenSize())));?
f.close();?
}
catch(AWTException?e1)?...{}?
catch(IOException?e2)?...{}?
}
?

//?使用說(shuō)明?

private?static?void?usage()?...{?
System.out.println(
"Usage:?java?ScreenCapture?[-d?seconds]?[-f?filename]");?
System.out.println(
" -d?Seconds?to?delay?before?capturing?screen");?
System.out.println(
" -f?JPG?filename?to?save");?
System.exit(
0);?
}
?

public?static?void?main(String?args[])?...{?
int?s?=?0;?
String?filename?
=?"ScreenCapture.jpg";?
//?判定輸入的參數(shù)?
if?(args.length?==?0)?
usage();?
else?...{?
for?(int?i?=?0?;?i?<?args.length?;?i++)?...{?
if?(args[i].startsWith("-"))?...{?
if?(args[i].equals("-d"))?...{?
if?(i?<?args.length?-?1)?
s?
=?Integer.parseInt(args[++i]);?
else?
usage();?
}
?

if?(args[i].equals("-f"))?...{?
if?(i?<?args.length?-?1)?
filename?
=?args[++i];?
else?
usage();?
}
?
}
else?
usage();?
}
?
}
?
ScreenCapture(s?
*?1000,?filename);?
System.exit(
0);?
}
?
使用者本身這個(gè)系統(tǒng)事件,或根據(jù)使用者的需要(例如程序需要自動(dòng)展示一些功能等)來(lái)控制鼠標(biāo)或鍵盤。?

在?Robot?這個(gè)類中產(chǎn)生的事件有別于在AWT元件中的事件,在AWT?元件中的事件(例如?MouseEvent、KeyEvent等)會(huì)被放置在?AWT的事件隊(duì)列中等候處理。但您用?Robot?這個(gè)類別所產(chǎn)生的事件,則會(huì)被放置在操作系統(tǒng)的事件隊(duì)列中等候處理。例如,當(dāng)你用了?Robot?中的?Robot.mouseMove()?這個(gè)方法,就表示真的讓您的鼠標(biāo)移動(dòng)了,而不像?AWT?事件中只是產(chǎn)生鼠標(biāo)移動(dòng)的事件而已。?

在這里要注意的是,由于?Robot?產(chǎn)生了一些較低階的控制,所以一旦當(dāng)前系統(tǒng)不允許您從事這些控制時(shí),就會(huì)發(fā)出?AWTException?這個(gè)例程來(lái)通知您。?
</td>?<td?width="267"?align="right">?</td>?</tr>?</table>?
import?java.awt.*;?
import?java.awt.event.*;?
public?class?example1?...{?
Robot?robot
=null;?
void?initial()?...{?
try?...{?
//?產(chǎn)生一個(gè)?Robot?類別的物件?
robot?=?new?Robot();?
}
catch?(AWTException?ex)?...{}?
}
?

void?start()?...{?
//?一開始希望鼠標(biāo)移動(dòng)到的座標(biāo)?
int?initX?=?30,?initY?=?10;?
//然后希望移動(dòng)到的鼠標(biāo)座標(biāo)?
int?disX?=?120,?disY?=?20;?
//?目前鼠標(biāo)的位置座標(biāo)?
int?mouseX,?mouseY;?
mouseX?
=?initX;?
mouseY?
=?initY;?
//?延遲了?3?秒鐘?
robot.delay(3000);?
//?移動(dòng)到?左上角第一個(gè)圖標(biāo)的位置?
robot.mouseMove(30,10);?
//?鼠標(biāo)按下了鼠標(biāo)右鍵?
robot.mousePress(InputEvent.BUTTON3_MASK);?
//?鼠標(biāo)放開所按下的右鍵?
robot.mouseRelease(InputEvent.BUTTON3_MASK);?
//?停留?1?秒鐘?
robot.delay(1000);?
//?鼠標(biāo)移動(dòng)到“打開”的位置?
for(int?i?=?0?;?mouseX?<?disX?;?i++)?...{?
mouseX?
=?mouseX?+?i;?
robot.mouseMove(mouseX,?mouseY);?
robot.delay(
50);?
}
?

for(int?j?=?0?;?mouseY?<?disY?;?j++)?...{?
mouseY?
=?mouseY?+?j;?
robot.mouseMove(mouseX,?mouseY);?
robot.delay(
50);?
}
?
//?停留?1?秒鐘后按下左鍵?
robot.delay(1000);?
robot.mousePress(java.awt.event.InputEvent.BUTTON1_MASK);?
robot.mouseRelease(InputEvent.BUTTON1_MASK);?
}
?
public?static?void?main(String[]?args)?...{?
example1?ex
=new?example1();?
ex.initial();?
ex.start();?
System.exit(
0);?
}
?
}
?

在Robot類中有一個(gè)比較特殊的method:?
BufferedImage?createScreenCapture(Rectangle?screenRect)?
顧名思義,當(dāng)我們使用這個(gè)這個(gè)method?時(shí),就會(huì)建立一張影像,而這張影像中存的的則是我們從屏幕擷取出來(lái)的像素(pixel)。而使用這個(gè)method,就會(huì)傳回一個(gè)BufferedImage類的對(duì)象,我們可以根據(jù)我們的需要來(lái)對(duì)它進(jìn)行處理。下面是個(gè)簡(jiǎn)單的范例,在這個(gè)范例中,程序會(huì)在使用者希望停留的秒數(shù)鐘后截取屏幕,并將文件用jpg格式保存。?
/**//*?
*?@(#)ScreenCapture.java?2001/09/24?
*?Usage:?java?ScreenCapture?[-d?seconds]?[-f?filename]?
*?@Author?
*?Cheng-Yu?Chang?
*?@License?
*?GPL(GNU?GENERAL?PUBLIC?LICENSE)?
*?
http://www.gnu.org/copyleft/gpl.html?
*/
?
import?java.awt.*;?
import?java.awt.image.*;?
import?java.io.*;?
import?com.sun.image.codec.jpeg.JPEGCodec;?
import?com.sun.image.codec.jpeg.JPEGImageEncoder;?
public?class?ScreenCapture?...{?
public?static?void?ScreenCapture(int?seconds,?String?filename)?...{?
Robot?robot?
=?null;?
//?產(chǎn)生?Robot?物件,記著要?catch?AWTException?
try?...{?
robot?
=new?Robot();?
//?延遲使用者輸入的秒數(shù)?
robot.delay(seconds);?
//?將截取的image轉(zhuǎn)換成jpg格式?
OutputStream?f?=?new?FileOutputStream(filename);?
JPEGImageEncoder?encoder?
=?JPEGCodec.createJPEGEncoder(f);?
encoder.encode(robot.createScreenCapture(
new?Rectangle(Toolkit.getDefaultToolkit().getScreenSize())));?
f.close();?
}
catch(AWTException?e1)?...{}?
catch(IOException?e2)?...{}?
}
?

//?使用說(shuō)明?

private?static?void?usage()?...{?
System.out.println(
"Usage:?java?ScreenCapture?[-d?seconds]?[-f?filename]");?
System.out.println(
" -d?Seconds?to?delay?before?capturing?screen");?
System.out.println(
" -f?JPG?filename?to?save");?
System.exit(
0);?
}
?

public?static?void?main(String?args[])?...{?
int?s?=?0;?
String?filename?
=?"ScreenCapture.jpg";?
//?判定輸入的參數(shù)?
if?(args.length?==?0)?
usage();?
else?...{?
for?(int?i?=?0?;?i?<?args.length?;?i++)?...{?
if?(args[i].startsWith("-"))?...{?
if?(args[i].equals("-d"))?...{?
if?(i?<?args.length?-?1)?
s?
=?Integer.parseInt(args[++i]);?
else?
usage();?
}
?

if?(args[i].equals("-f"))?...{?
if?(i?<?args.length?-?1)?
filename?
=?args[++i];?
else?
usage();?
}
?
}
else?
usage();?
}
?
}
?
ScreenCapture(s?
*?1000,?filename);?
System.exit(
0);?
}
?

總結(jié)

以上是生活随笔為你收集整理的java中Robot的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。