Java Robot-类函数问题



我正试图为Java AWT Robot制作一个单独的类来与项目一起使用,但我很难按照自己的意愿设置它,因为我在网上找到的所有示例似乎都将代码打包到一个.Java文件中。

我的代码运行良好,但我想知道是否可以用一种更好的方式设置函数。

RobotLib.java类的代码如下:

package com.z;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
    public class RobotLib {
    private static Robot robot;
    // Press Function
    public void Press(int key, int time){ 
        try {
        Robot robot = new Robot();
            robot.keyPress(key);
            robot.delay(time);
            robot.keyRelease(key);
        } catch (AWTException e) {
            e.printStackTrace();
        }
    } 
}

我的Example.java代码是:

package com.z;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Example {
    public static void main(String[] args) {
        RobotLib robot = new RobotLib();
        robot.Press(KeyEvent.VK_A,100); // type a
    }
}

对于RobotLib.java类,我想知道是否有可能在不使用try/catch和new Robot()包装函数的情况下获得这些函数,所以与上面的版本不同,它将是这样的:

public void Press(int key, int time){ 
    robot.keyPress(key);
    robot.delay(time);
    robot.keyRelease(key);
}

try/catch和新的Robot()似乎是必需的,但是如果我把它们拿走,我会得到这样的错误:

Exception in thread "main" java.lang.NullPointerException
    at com.z.RobotLib.Press(RobotLib.java:35)
    at com.z.Example.main(Example.java:14)

我对Java编码还很陌生,可能会以错误的方式设置类,有没有办法修复这个错误或按照我想要的方式设置函数?

是的,您确实需要try/catch块,但是的,还有一种方法可以更好地设置这些函数。不需要每次调用Press方法时都创建一个robot。在构造函数中创建静态Robot实例。

public class RobotLib {
private static Robot robot;
public RobotLib(){
  robot = new Robot();
}
// Press Function
public void Press(int key, int time){ 
    try {
        robot.keyPress(key);
        robot.delay(time);
        robot.keyRelease(key);
    } catch (AWTException e) {
        e.printStackTrace();
    }
} 
}

不太确定你的问题,但我希望这可能会有所帮助!

您可以抛出异常以避免不必要的try-and-catch块。此外,创建Robot类的实例可以避免在需要的每一行都编写新的Robot()

我刚刚找到了一种方法,可以使用Raskolnikov发布的代码的修改版本来完成我想要的操作,它允许使用我想要的更短版本的函数:

public class RobotLib {
private static Robot robot;
public RobotLib(){
  try {
    robot = new Robot();
} catch (AWTException e) {
    e.printStackTrace();
}
}
// Press Function
public void Press(int key, int time){ 
    robot.keyPress(key);
    robot.delay(time);
    robot.keyRelease(key);
} 
}

最新更新