Java机器人类函数问题

Java机器人类函数问题,java,class,awt,awtrobot,Java,Class,Awt,Awtrobot,我试图为Java AWT Robot创建一个单独的类来用于项目,但是我在如何设置它时遇到了困难,因为我在网上找到的所有示例似乎都将代码打包到一个.Java文件中 我的代码工作得很好,但是我想知道是否可以用更好的方式设置函数 RobotLib.java类的代码如下: package com.z; import java.awt.*; import java.awt.event.*; import java.util.*; public class RobotLib { pri

我试图为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和new 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实例

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();
    }
} 

}

我刚刚找到了一种方法,使用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);
} 

}

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


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

谢谢,不过我试图避免使用try、catch和new Robot()的需要。基本上,我想缩短函数,使它们类似于您可以在线找到的robot类示例,其中它们使用单个.java文件。就像我在错误消息的最后贴出的那样,这在一个类中是可能的吗?我想我会按照你的建议进行设置,所以我接受了你的答案,能够避免每个函数的try-catch是很好的,但我想在一个类中是不可能的。谢谢你的帮助。实际上,在测试了你的代码之后,它给了我错误。eclipse中突出显示了新的Robot()和AWTException。知道如何更正吗?您需要确保正确导入了AWTException。我还假设Robot类有一个空构造函数,但上面的代码也是这样。它报告的是什么类型的错误?我不确定如何像您建议的那样导入AWTException,我通过您的代码得到这个错误:线程“main”java.lang中的异常。错误:未解决的编译问题:未处理的异常类型AWTException AWTException无法访问AWTException的catch块。这个异常永远不会从com.z.RobotLib(RobotLib.java:93)com.z.Example.main(Example.java:9)的try语句体抛出。欢迎使用SO。尝试通过添加代码示例来改进您的答案:)非常感谢。。。很快就会好起来的。。谢谢你,菲利克斯