首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.awt.Robot inside游戏?

java.awt.Robot inside游戏?
EN

Stack Overflow用户
提问于 2014-09-18 17:31:53
回答 3查看 2.2K关注 0票数 3

我正在尝试用下面的代码模拟击键。当我打开记事本时,它工作得很好,但当我打开我想要使用它的游戏时,它什么也不做。所以按键似乎不起作用。我试着模拟鼠标移动和点击,这些动作确实起作用了。有人知道如何解决这个问题吗?

我找到了这个问题,How can I use java.awt.Robot inside games?,但我不能添加评论或任何东西。

代码语言:javascript
复制
package MyProject;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class KeyStroke {

    public static void main(String[] args) throws AWTException {

        Robot robot = new Robot();

        robot.delay(3000);

        robot.keyPress(KeyEvent.VK_Q);
        robot.keyPress(KeyEvent.VK_W);
        robot.keyPress(KeyEvent.VK_E);
        robot.keyPress(KeyEvent.VK_R);
        robot.keyPress(KeyEvent.VK_T);
        robot.keyPress(KeyEvent.VK_Y);

    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-18 17:52:42

您可能希望按下并释放这些键来模拟击键,即当前代码将按住Q、W、E、R、T和Y,直到触发释放。此外,您可能希望在一小段时间内按住它们,因为当我这样做时,这会给我带来一些问题。

代码

代码语言:javascript
复制
package MyProject;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class KeyStroke {
    private static Robot robot;

    public static void main(String[] args) throws AWTException {
        robot = new Robot();
        robot.delay(3000);
        keystroke(KeyEvent.VK_Q);
        keystroke(KeyEvent.VK_W);
        keystroke(KeyEvent.VK_E);
        keystroke(KeyEvent.VK_R);
        keystroke(KeyEvent.VK_T);
        keystroke(KeyEvent.VK_Y);
    }

    private static void keystroke(int key) {
        robot.keyPress(key);
        robot.delay(100); // hold for a tenth of a second, adjustable
        robot.keyRelease(key);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2018-08-28 04:40:21

每当人们遇到java.awt.Robot方法没有在程序中注册的问题时,最有可能的原因是这些方法没有释放按键/鼠标击键,或者在按下/释放之间没有延迟。这同样适用于鼠标点击和击键。

有两件事需要检查-

  1. 如果您使用的是robot.keyPress(key),请确保在某个时候使用robot.keyRelease(key)

  1. 确保PressRelease之间有足够大的延迟。经验法则100 ms

示例

不正确

robot.keyPress(key); // without a keyRelease

代码语言:javascript
复制
robot.keyPress(key); 
robot.keyRelease(key); // no delay

对,是这样

代码语言:javascript
复制
robot.keyPress(key);
Thread.sleep(100) // or robot.delay(100);
robot.keyRelease(key);
票数 0
EN

Stack Overflow用户

发布于 2014-09-18 18:20:07

与上面相反-你在哪里添加你的关键监听器?

代码语言:javascript
复制
public class BetaTest {

    public static void main (String[] args){
        new BetaTest().startUp();
    }


    private void startUp() {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);

        final KeyAdapter ka = new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                super.keyPressed(e);
                System.out.println("key pressed");
            }

        };

        frame.addKeyListener(ka);

        Runnable r = new Runnable() {

            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    KeyEvent ke = new KeyEvent(frame, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, KeyEvent.VK_A, 'a');
                    ka.keyPressed(ke);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        Thread t = new Thread(r);
        t.setDaemon(true);
        t.start();

    }

}

输出是令人惊讶的

代码语言:javascript
复制
key pressed
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25909039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档