【问题标题】:Error when using the mousePress() method使用 mousePress() 方法时出错
【发布时间】:2014-06-08 12:32:20
【问题描述】:

我正在尝试在按钮 4 上使用鼠标事件。使用时返回的值

int moused = MouseInfo.getNumberOfButtons();

方法是 5。除了右键单击按钮 4 之外,我无法计算出其他按钮是什么;运行代码我得到这个错误:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid combinati
on of button flags
        at java.awt.Robot.checkButtonsArgument(Robot.java:324)
        at java.awt.Robot.mousePress(Robot.java:260)
        at RobotExp4.main(RobotExp4.java:23)

import java.awt.*;
import java.awt.event.KeyEvent;
public class RobotExp4{
public static void main(String [] args){
try{
    Robot robot = new Robot();
    System.out.println("7 Seconds after this message appears the robot will start to open a browser and make a search.");
    robot.delay(7000);
    robot.keyPress(KeyEvent.VK_WINDOWS);
    robot.keyRelease(KeyEvent.VK_WINDOWS);
    robot.delay(1000);
    robot.keyPress(KeyEvent.VK_C);
    robot.keyRelease(KeyEvent.VK_C);
    robot.delay(150);
    robot.keyPress(KeyEvent.VK_M);
    robot.keyRelease(KeyEvent.VK_M);
    robot.delay(150);
    robot.keyPress(KeyEvent.VK_D);
    robot.keyRelease(KeyEvent.VK_D);
    robot.delay(5000);
    robot.mouseMove(1340, 192);
    robot.delay(200);
    robot.mousePress(5);
    robot.delay(75);
    robot.mouseRelease(5);

}catch(AWTException e){
    e.printStackTrace();        
}
}
}

【问题讨论】:

    标签: java mouseevent awtrobot


    【解决方案1】:

    你需要将调用InputEvent.getMaskForButton的结果传递给mousePress,像这样:

    int mask4 = InputEvent.getMaskForButton(4);
    robot.mousePress(mask4);
    robot.delay(75);
    robot.mouseRelease(mask4);
    

    您需要传递掩码而不是按钮编号的原因是为了支持按钮组合:

    int mask1_and_2 = InputEvent.getMaskForButton(1) | InputEvent.getMaskForButton(2);
    

    上面的掩码对应于同时按下按钮 1 和 2。

    【讨论】:

    • 我已经尝试过了,它返回以下错误: RobotExp4.java:24: error: cannot find symbol int mask4 = InputEvent.getMaskForButton(4); ^ 符号:变量 InputEvent 位置:类 RobotExp4 1 错误
    【解决方案2】:

    问题也在于使用释放按钮。

    Robot autoPlay = new Robot();
    autoPlay.setAutoDelay(500);
    
    autoPlay.mousePress(InputEvent.BUTTON3_MASK);
    autoPlay.mouseRelease(InputEvent.BUTTON3_MASK);
    

    使用上面的sn-p,你的问题就解决了。

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 2013-09-20
      相关资源
      最近更新 更多