- 浏览: 179836 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
liuweihug:
图说浏览器的缓存原理及缓存方式说明(1) http://www ...
浏览器缓存机制 -
fei33423:
楼主为啥不根据评论改下文章..不然会误导很多人的..
Java5 Concurrent包中的锁机制 -
superscorpio:
根据总结,点击back和forward跟是否缓存无关。这应该是 ...
浏览器缓存机制 -
hzxlb910:
引用详细内容请访问我的新博客地址:http://xiaofen ...
Storm的第一份作业 -
tudopi:
遇到F5和enter刷新效果不一样的问题,看了文章解惑了
浏览器缓存机制
使用该类生成输入事件与将事件发送到 AWT 事件队列或 AWT 组件的区别在于:事件是在平台的本机输入队列中生成的。例如,Robot.mouseMove 将实际移动鼠标光标,而不是只生成鼠标移动事件。
Robot中主要的鼠标和键盘控制方法有:
- void keyPress(int keycode) 按下给定的键。
- void keyRelease(int keycode) 释放给定的键。
- void mouseMove(int x, int y) 将鼠标指针移动到给定屏幕坐标。
- void mousePress(int buttons) 按下一个或多个鼠标按钮。
- void mouseRelease(int buttons) 释放一个或多个鼠标按钮。
- void mouseWheel(int wheelAmt) 在配有滚轮的鼠标上旋转滚轮。
下面就让我们来实战鼠标控制,实现一个简单的鼠标控制程序MouseController。程序功能很简单:随机移动鼠标并点击左键。
代码如下:
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.util.Random;
/**
*
* @author Xiaofeng Wang
*/
public class MouseController implements Runnable {
private Dimension dim;
private Random rand;
private Robot robot;
private volatile boolean stop = false;
/** Creates a new instance of Main */
public MouseController() {
dim = Toolkit.getDefaultToolkit().getScreenSize();
rand = new Random();
try {
robot = new Robot();
} catch (AWTException ex) {
ex.printStackTrace();
}
}
public void run() {
while(!stop) {
int x = rand.nextInt(dim.width);
int y = rand.nextInt(dim.height);
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
public synchronized void stop() {
stop = true;
}
/** * @param args the command line arguments */
public static void main(String[] args) {
MouseController mc = new MouseController();
Thread mcThread = new Thread(mc);
System.out.println("Mouse Controller start");
mcThread.start();
try {
Thread.sleep(60000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
mc.stop();
System.out.println("Mouse Controller stoped");
}
}
当然键盘映射也类似,无非是使用void keyPress(int keycode)。
现 在实现了控制鼠标和键盘,接下了我们要获取操作后的效果(屏幕截图)。好在Robot类也提供了一个方法:BufferedImage createScreenCapture(Rectangle screenRect);可以直接将全屏幕或某个屏幕区域的像素拷贝到一个BufferedImage对象中。
好,下面实战使用robot截屏,实现Capture程序,每隔1秒截屏一次。
代码如下:
public class Capture extends javax.swing.JFrame implements Runnable {
/** Creates new form Capture */
public Capture() {
initComponents();
try {
robot = new Robot();
} catch (AWTException ex) {
ex.printStackTrace();
}
dim = Toolkit.getDefaultToolkit().getScreenSize(); }
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold desc=" 生成的代码 " defaultstate="collapsed"></editor-fold>
private void initComponents() {
screenCanvas = new java.awt.Canvas();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
stop = true;
setResizable(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(screenCanvas, javax.swing.GroupLayout.PREFERRED_SIZE, 519, javax.swing.GroupLayout.PREFERRED_SIZE) );
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(screenCanvas, javax.swing.GroupLayout.PREFERRED_SIZE, 434, javax.swing.GroupLayout.PREFERRED_SIZE)
);
pack();
}//
/** * @param args the command line arguments */
public static void main(String args[]) {
final Capture capture = new Capture();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
capture.setVisible(true);
}
});
Thread cutThread = new Thread(capture);
cutThread.start();
}
public void run() {
stop = false;
while(!stop) {
BufferedImage bImage = robot.createScreenCapture(new Rectangle(dim.width, dim.height));
Graphics g = this.screenCanvas.getGraphics();
g.drawImage(bImage, 0, 0, this);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
private synchronized void stop() {
stop = true;
}
// 变量声明 - 不进行修改
private java.awt.Canvas screenCanvas;
// 变量声明结束
private volatile boolean stop;
private Robot robot;
private Dimension dim;
}
发表评论
-
hibernate启动时的一个小问题
2010-01-07 21:39 1297测试时报错但测试可正常运行javax.naming.NoIni ... -
JRobin简介
2009-03-20 10:49 1304做过网络管理的人,对于MRTG应该不算陌生 ... -
Java中assertion的使用
2009-03-18 16:06 2259assertion的使用是一个复杂的问题,因为这将 ... -
监控系统实现设计
2009-03-18 14:37 0做了半年的网络监控系统,研究过一些开源的解决方案(如:Open ... -
JVM调优总结
2009-03-03 10:40 1280堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统 ... -
Java Reference的简单总结
2009-02-18 10:45 1174介绍 J ava 2 平台中引入 java.lang.re ... -
Java5 Concurrent包中的锁机制
2009-02-16 16:19 3114JDK1.5以后加入了concurrent包, ... -
该选择哪个Java Map对象?
2009-01-04 16:48 1227HashMap, Hashtable, LinkedHash ... -
Java编码规范
2008-12-08 11:21 10111 介绍(Introduction) 1.1 为什么要有编码规 ... -
在OSGi中运行Servlet
2008-06-13 10:05 2358这几天在研究OSGi这个东东,稍有成果。 什么是OSGi? 简 ... -
使用一个servlet来分配所有的gwt service
2007-12-19 16:30 2157GWT中默认一个service对应一个servlet,这样会使 ... -
让Tapestry5支持中文
2007-04-17 13:18 2334相信很多使用Tapestry5的人和我一样,碰到中文编码的问题 ... -
Struts开发流程
2007-04-06 14:47 2674开发流程如下:1.收集 ... -
重构原则(Java)
2007-04-06 14:44 25321995,Auer曾在文献[AUER95]中指出: 1.应当根 ... -
使用JACOB控制Powerpoint
2007-04-03 16:52 3182什么是JACOB? JACOB是一个JAVA和COM之间的桥接 ... -
为Java ME程序添加蓝牙文本协议
2007-04-03 16:48 1868这篇文章的副标题是: ... -
使用MIDPLogger进行在机调试
2007-04-03 16:47 1039在进行手机蓝牙远程控制的开发中,需要通过蓝牙控制PC,这个过程 ... -
在测试MIDlet时需要考虑的一些重要方面
2007-04-03 16:45 1147在测试MIDlet时需要考虑的一些重要方面: 即使运行环境 ... -
MIDlet的事件模型
2007-04-03 16:44 1110javax.mircoedition.lcdui包实现了一个同 ... -
学习java要经常看的网站[转]
2007-04-03 16:40 1294http://java.sun.com/developer/b ...
相关推荐
主要为大家详细介绍了Java实现鼠标模拟与键盘映射,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest.java 序列化对象示例 ReadAndWrite.java 读入和写出数据 ReadAndWriteFile.java ...
ControllerToKeys旨在通过模拟按键,鼠标移动,鼠标按钮,滚轮和按键组合(即alt + tab),为所有没有该功能的PC游戏提供完全的控制器支持。 通过保存和共享按钮映射的能力,目的是能够通过以下方式与他人公开共享...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 ...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列...
9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再述模拟键盘鼠标事件(adb shell 实现) 334 9.87、反编译APK 344 9.88、更换APK图标(签名打包) 348 9.89、利用ANDROID MARKET赚钱 363 9.90...
9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再述模拟键盘鼠标事件(adb shell 实现) 334 9.87、反编译APK 344 9.88、更换APK图标(签名打包) 348 9.89、利用ANDROID MARKET赚钱 363 9.90...
文本、按钮、图标及图形 <br>6.1 基本的Web链接模型 <br>6.1.1 结构和非结构链接的比较 <br>6.1.2 静态和动态链接 <br>6.2 ...6.2.5 图像映射 <br>6.2.6 其他链接方式 <br>6.3 链接的实现问题...
文本、按钮、图标及图形 <br>6.1 基本的Web链接模型 <br>6.1.1 结构和非结构链接的比较 <br>6.1.2 静态和动态链接 <br>6.2 ...6.2.5 图像映射 <br>6.2.6 其他链接方式 <br>6.3 链接的实现问题...