我编写了一个Java应用程序,允许用户编写鼠标/键盘输入脚本(JMacro,链接并不重要,只是为了好奇).我个人使用该应用程序在我睡觉的同时在线游戏中自动执行角色动作.不幸的是,我一直在早上回到电脑前发现它没有反应.经过进一步测试,我发现我的应用程序导致计算机在大约10分钟的用户空闲时间后无响应(即使应用程序本身模拟用户活动).我似乎无法指出这个问题,所以我希望其他人可能会建议在哪里寻找或可能导致问题的原因.
相关症状和特征:
鉴于问题的症状和特征,就好像Java应用程序导致登录用户的桌面显示停止更新,包括任何正在运行的应用程序.
使用的编程概念和Java包:
系统规格:
总之,我应该强调,我不是在寻找任何具体的解决方案,因为我没有提出一个非常具体的问题.我只是想知道在使用我正在使用的Java库时是否有人遇到过类似的问题.我也很乐意感谢有任何建议,试图进一步查明造成问题的原因.
谢谢!
罗斯
PS,我会发布更新/答案,如果我在继续调试时遇到其他任何问题.
更新:我的应用程序涉及多线程进程,每个进程初始化自己的Robot对象并异步创建输入事件.我重构了应用程序只包含一个Robot单例对象,但不同的进程仍然异步调用输入命令.据我所知,这并没有改变我的应用程序的行为.我的下一步可能是在Robot单例周围创建一个同步包装器,看看是否有帮助,但鉴于症状,我不知道为什么会这样.
我想模拟在JTextField中输入一个字符串(可以包含任何字符).我正在使用新的KeyEventData().但我无法确定如何处理{,},等等字符,以及如何将新字符附加到已输入的字符.
我正在使用java创建一个机器人,但是有一个具有特殊和强大安全性的应用程序,我无法在那里执行我的机器人,由于某种原因我不知道,我的机器人在这样的应用程序时无法改变鼠标位置运行.我正在使用java.awt.Robot类来改变鼠标位置,但它不起作用,所以我想知道是否有另一种方法来改变java的鼠标位置,我想在尝试改变使用java的鼠标缓冲区(也许它不可能,是吗?).如果你能告诉我一些用java改变鼠标位置而不使用java.awt.Robot类,我感谢你.
例如,此代码将鼠标位置变为500,500坐标:
Robot robot = new Robot();
robot.mouseMove(500, 500);
Run Code Online (Sandbox Code Playgroud)
,但在具有特殊安全性的应用程序运行时它不起作用.
谢谢.
我正在和患有脑瘫的残疾儿童一起工作.一个孩子的精细运动控制有限,所以她目前使用操纵杆来控制鼠标,并且它的移动速度设置得非常低.这对她很有用,因为她可以点击屏幕上的所有按钮,但我认为我们可以做得更好 - 当她想要遍历整个屏幕时需要一个年龄(大约10秒).
我的假设是她的大脑很好,只有她的运动控制能力差.如果这是真的,我相信一个低速启动但经历恒定加速的鼠标对她来说会更好,因为它会提高速度并在穿越整个屏幕时变得快速.如果这样可行,那么我们可以调整PID控制,以及为大量残疾人设置速度/加速度,从而加快他们的访问速度,从而加快他们的学习和发展.
但我不知道建立这个的最佳方式 - 欢迎所有建议,想法,链接和提示.
首先,我尝试使用Processing和Java,并使用mouseListener和Robot来控制光标.我不相信这是最好的方法,因为我正在读光标位置然后写入它,所以我最好的尝试仍然会让光标跳转,并且没有平稳的移动.它在Java中是否可以实现?我是否需要使用某种驱动程序从USB读取鼠标输入,然后将屏幕上的光标替换为我自己的?
我制作了几个视频来说明我想要带来的效果.
现状(我的插图是将光标从箭头键上移开) http://www.youtube.com/watch?v=3ZhQCg5DJt8
我想要的新行为(鼠标加速) http://www.youtube.com/watch?v=JcBK_ZCFGPs
如果它有用,我用于制作这些演示的处理代码将在下面复制:
现状演示:
import java.awt.AWTException;
import jav
a.awt.Robot;
Robot robot;
int i = 0;
int j = 0;
void setup() {
setupDotgame();
try {
robot = new Robot();
}
catch (AWTException e) {
e.printStackTrace();
}
robot.mouseMove(screenWidth/2, screenHeight/2);
}
void draw() {
//println(frameCount);
robot.mouseMove(screenWidth/2+8*i, screenHeight/2+8*j);
drawDotgame();
}
void keyPressed() {
if (keyCode == UP) {
j--;
}
else if (keyCode == DOWN) {
j++;
}
else if (keyCode == …
Run Code Online (Sandbox Code Playgroud) 以下代码捕获屏幕:
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
public class capture{
public static void main(String args[]) {
try {
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
Robot robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(size));
} catch(Exception e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法,只捕获屏幕的所需部分(例如矩形,从一个x,y点到另一个)?
通过java机器人类按特殊字母(土耳其语等)我有问题.我有一种按键的方法,可以作为alt + keycode.我无法将一些特殊字母转换为当前键码.那我怎么解决呢 感谢名单
例如:
KeyStroke ks = KeyStroke.getKeyStroke('ö', 0);
System.out.println(ks.getKeyCode());
Output : 246
// So alt+0246='ö'
//but if I convert '?' to keycode
//Output is 351 . So alt+351= '_' and alt+0351= '_'
//What is the Correct combination for '?'. same for '?', '?','?', '?', '?', '?', '?', '?'
Run Code Online (Sandbox Code Playgroud)
按键:
public void altNumpad(int... numpadCodes) {
if (numpadCodes.length == 0) {
return;
}
robot.keyPress(VK_ALT);
for (int NUMPAD_KEY : numpadCodes) {
robot.keyPress(NUMPAD_KEY);
robot.keyRelease(NUMPAD_KEY);
}
robot.keyRelease(VK_ALT);
}
Run Code Online (Sandbox Code Playgroud) 到目前为止,我已经使用了Selenium Actions库来在我们的自动化项目中执行鼠标/键盘操作.
最近,我发现了Java AWT Robot类.它与Selenium Actions库相比如何?其中一个中有一些角落案例是另一个解决了吗?限制吗?稳定性?性能考虑?
我想以编程方式按音量按钮.在Java中,可以使用机器人类,但在Android中没有机器人类.
我想知道如何在Android中实现这一点.
我在IntelliJ IDE中使用该代码创建了Java文件
import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Robot;
public class JavaRobotExample {
public static void main(String[] args) {
int x = 12,
y = 300;
try {
Robot robot = new Robot();
robot.mouseMove(x, y);
int xAct = (int) MouseInfo.getPointerInfo().getLocation().getX(),
yAct = (int) MouseInfo.getPointerInfo().getLocation().getY();
String sPred = String.format("Predicted mouse location : %, d, %, d", x, y),
sAct = String.format("Actual mouse location : %, d, %, d", xAct, yAct);
System.out.println(sPred);
System.out.println(sAct);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
该示例在Windows …
执行软件时出现以下异常:
Exception in thread "main" java.lang.IllegalArgumentException: Delay must be to 0 to 60,000ms
at java.awt.Robot.checkDelayArgument(Robot.java:544)
at java.awt.Robot.delay(Robot.java:534)
at com.company.Main.main(Main.java:10)
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是有一个睡眠时间限制,并且标准库异常消息的语法/错字(to 0 to
?)不好。在检查了delay()
方法的源代码之后,我注意到它限制了等待时间,因为出现了以下异常:
/**
* Sleeps for the specified time.
* To catch any <code>InterruptedException</code>s that occur,
* <code>Thread.sleep()</code> may be used instead.
* @param ms time to sleep in milliseconds
* @throws IllegalArgumentException if <code>ms</code> is not between 0 and 60,000 milliseconds inclusive
* @see java.lang.Thread#sleep
*/
public synchronized void delay(int ms) {
checkDelayArgument(ms);
try { …
Run Code Online (Sandbox Code Playgroud) awtrobot ×10
java ×9
swing ×2
android ×1
api-design ×1
awt ×1
class ×1
jtextfield ×1
keycode ×1
macos ×1
macos-mojave ×1
mousemove ×1
processing ×1
screen ×1
selenium ×1