首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java Robot - Class函数问题

Java Robot - Class函数问题
EN

Stack Overflow用户
提问于 2012-08-01 09:08:07
回答 3查看 2.7K关注 0票数 0

我正在尝试为Java AWT Robot创建一个单独的类来用于项目,但我在设置它时遇到了麻烦,因为我在网上找到的所有示例似乎都将代码打包到一个.java文件中。

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

RobotLib.java类的代码如下所示:

代码语言:javascript
运行
复制
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代码是:

代码语言:javascript
运行
复制
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()包装函数的情况下拥有这些函数,所以与上面的版本不同,它应该是这样的:

代码语言:javascript
运行
复制
public void Press(int key, int time){ 
    robot.keyPress(key);
    robot.delay(time);
    robot.keyRelease(key);
}

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

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.NullPointerException
    at com.z.RobotLib.Press(RobotLib.java:35)
    at com.z.Example.main(Example.java:14)

我对Java编码非常陌生,可能是以错误的方式设置类,有没有办法修复这个错误或者让函数按我想要的方式运行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-01 10:08:47

我只是找到了一种方法来使用Raskolnikov发布的代码的修改版本来做我想做的事情,它允许我想要的函数的更短版本:

代码语言:javascript
运行
复制
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);
} 

}
票数 0
EN

Stack Overflow用户

发布于 2012-08-01 09:18:08

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

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2014-09-30 22:34:42

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11751238

复制
相关文章

相似问题

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