- 浏览: 184598 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1346测试时报错但测试可正常运行javax.naming.NoIni ... -
JRobin简介
2009-03-20 10:49 1343做过网络管理的人,对于MRTG应该不算陌生 ... -
Java中assertion的使用
2009-03-18 16:06 2309assertion的使用是一个复杂的问题,因为这将 ... -
监控系统实现设计
2009-03-18 14:37 0做了半年的网络监控系统,研究过一些开源的解决方案(如:Open ... -
JVM调优总结
2009-03-03 10:40 1319堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统 ... -
Java Reference的简单总结
2009-02-18 10:45 1205介绍 J ava 2 平台中引入 java.lang.re ... -
Java5 Concurrent包中的锁机制
2009-02-16 16:19 3231JDK1.5以后加入了concurrent包, ... -
该选择哪个Java Map对象?
2009-01-04 16:48 1264HashMap, Hashtable, LinkedHash ... -
Java编码规范
2008-12-08 11:21 10991 介绍(Introduction) 1.1 为什么要有编码规 ... -
在OSGi中运行Servlet
2008-06-13 10:05 2394这几天在研究OSGi这个东东,稍有成果。 什么是OSGi? 简 ... -
使用一个servlet来分配所有的gwt service
2007-12-19 16:30 2201GWT中默认一个service对应一个servlet,这样会使 ... -
让Tapestry5支持中文
2007-04-17 13:18 2378相信很多使用Tapestry5的人和我一样,碰到中文编码的问题 ... -
Struts开发流程
2007-04-06 14:47 2719开发流程如下:1.收集 ... -
重构原则(Java)
2007-04-06 14:44 25771995,Auer曾在文献[AUER95]中指出: 1.应当根 ... -
使用JACOB控制Powerpoint
2007-04-03 16:52 3224什么是JACOB? JACOB是一个JAVA和COM之间的桥接 ... -
为Java ME程序添加蓝牙文本协议
2007-04-03 16:48 1973这篇文章的副标题是: ... -
使用MIDPLogger进行在机调试
2007-04-03 16:47 1078在进行手机蓝牙远程控制的开发中,需要通过蓝牙控制PC,这个过程 ... -
在测试MIDlet时需要考虑的一些重要方面
2007-04-03 16:45 1182在测试MIDlet时需要考虑的一些重要方面: 即使运行环境 ... -
MIDlet的事件模型
2007-04-03 16:44 1155javax.mircoedition.lcdui包实现了一个同 ... -
学习java要经常看的网站[转]
2007-04-03 16:40 1325http://java.sun.com/developer/b ...
相关推荐
在 Java 中实现鼠标模拟与键盘映射是通过使用 Robot 类来实现的。Robot 类是 Java SDK 1.3 及更高版本中引入的,用于生成本机系统输入事件,以便于自动测试、自运行演示程序和其他需要控制鼠标和键盘的应用程序。 ...
在Java中,直接控制硬件设备如鼠标和键盘通常需要借助于特定的库。在这个场景下,"java 控制鼠标*键盘的 jna 库32位" 提供了这样的功能,通过Java Native Access (JNA) 库来实现。 JNA 是一个Java库,允许Java代码...
标题“键盘模拟鼠标滚轮滚动”所描述的是一款软件应用,它的主要功能是让用户通过键盘来模拟鼠标的滚轮操作,实现页面或文档的上下滚动。这种工具特别适合那些滚轮损坏或者不方便使用鼠标滚轮的用户,可以提高他们在...
在Java编程语言中,我们可以利用特定的库来模拟键盘输入,从而实现自动化操作,比如在游戏中自动演奏特定的旋律。在“原神”这款游戏中,“风物之诗琴”是一种道具,玩家可以弹奏它来演奏各种音乐。这篇教程将探讨...
在"Java实现获取窗口句柄并操作窗口 JNA"的场景中,窗口句柄是操作系统用来标识和管理窗口的一个标识符。在Windows系统中,窗口句柄通常被称为HWND。通过窗口句柄,我们可以执行诸如移动、最大化、最小化、关闭等...
在我们的钢琴模拟程序中,开发者可能就是通过这种方式定义了Applet类,从而构建了一个可播放音符的虚拟键盘。 接着,我们需要关注的是Java音频处理。Java提供了一套完整的音频处理API,包括`javax.sound.sampled`包...
这样,即使在进行鼠标模拟时,主程序仍能继续执行其他任务。 4. **键盘映射和按键模拟**: 为了实现用两个按键模拟鼠标点击,需要确定哪些键盘按键将被映射为鼠标左键单击和双击。通常,可以使用ASCII码或扫描码来...
- **Robot类**:用于模拟键盘和鼠标事件,是实现远程控制的基础。 - **Toolkit类**:提供工具箱服务,用于获取屏幕大小和颜色深度等信息。 - **JPEGCodec类**:进行JPEG图像编码和解码,确保屏幕图像高效传输。 - **...
在Java中实现VR全景图通常涉及图像处理和数学计算,如球面坐标到屏幕坐标的转换。开发者可能使用了Java的AWT或Swing库来创建图形界面,并且利用图像处理库如JavaFX或Java2D来渲染和操作全景图。 2. **OpenGL 3D模型...
Java中实现3D图形通常有两种主要的方式:Java2D和Java3D。Java2D是一个二维图形库,虽然它的名字中没有“3D”,但通过组合2D图形和一些技巧,也能实现简单的3D效果。而Java3D则是一个更为强大的库,专为构建复杂的3D...
MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest.java 序列化对象示例 ReadAndWrite.java 读入和写出数据 ReadAndWriteFile.java ...
6. **用户交互**:Java3D支持鼠标和键盘事件处理,可以实现用户与3D场景的交互,例如旋转、平移和缩放视图,或者响应用户的点击事件。 7. **纹理映射**:通过Texture和TextureAttributes类,开发者可以将2D图像贴附...
3. **操作简便**:界面友好,用户可以通过鼠标和键盘轻松操控模拟的手机界面,实现与真实手机类似的交互体验。 4. **无需升级提示**:可能是因为开发者针对用户的特定需求,手机顽童不会频繁弹出升级提示,让用户...
2. **键盘映射**:允许用户将手机操作映射到键盘或鼠标,便于在PC上控制Java应用。 3. **多任务处理**:可以同时运行多个Java应用,模拟多任务环境。 4. **调试工具**:提供调试接口,帮助开发者定位和修复代码问题...
本教程专注于利用Java3D实现交互式三维图形编程,帮助开发者掌握如何在Java环境中构建生动且具有交互性的3D场景。 在Java3D中,你可以创建各种几何形状,如立方体、球体、圆柱体等,并通过变换(如旋转、平移和缩放...
9. **用户交互**: Java3D支持鼠标和键盘事件,可以实现用户与3D场景的交互,例如旋转、平移和缩放场景。 10. **C/S架构**: “C/S架构”即客户端/服务器架构,Java3D可以在这种架构下运行,客户端负责展示3D图形,...
- **用户交互**:Java3D可以与Java AWT或Swing组件结合,实现用户交互,如鼠标和键盘事件处理。 - **动画**:通过定时器和更新函数,可以创建动态的3D场景,例如物体的运动、旋转或形状变化。 总的来说,Java3D为...
同时,附带的资源文件可能包含了一些示例项目的源码,如OReilly.Killer.Game.Programming.in.Java.May.2005.chm,这可能是与游戏编程相关的参考资料,可以辅助学习Java3D在游戏开发中的应用。 总之,通过阅读《Java...
这种模拟器通过模拟Java虚拟机(JVM)的功能来实现对Java游戏的兼容性,使用户能够在没有实际Java手机或设备的情况下重温那些经典游戏。 "彩虹城堡"是提及的一款经典Java游戏,它可能是众多Java游戏中的一个代表,...
同时,它还提供了与用户的交互机制,如键盘、鼠标事件处理,使用户能够在虚拟环境中进行交互操作。 在实际的基于Java3D的虚拟漫游系统开发中,研究可能涉及以下方面: - **环境构建**:设计和构建具有真实感的3D...