Java Robot - 类函数问题

时间:2012-08-01 01:08:07

标签: java class awt awtrobot

我正在尝试为Java AWT机器人创建一个单独的类来与项目一起使用,但是我无法设置我想要的方式,因为我在网上找到的所有示例似乎都将代码打包成一个。而是改为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编码很新,可能是以错误的方式设置类,有没有办法解决这个错误或者有我想要的功能?

3 个答案:

答案 0 :(得分:1)

是的,你确实需要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();
    }
} 

}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我刚刚发现了一种方法,可以使用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);
} 

}