2012-08-01 102 views
0

我想为Java AWT机器人制作一个单独的类,以便与项目一起使用,但我无法设置它,因为我在网上发现的所有示例都似乎打包代码转换为单个.java文件。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和新的Robot()来包装它们的功能,那么代替上面的版本,它会是这样的:

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

的try/catch语句和新的机器人()似乎然而需要,如果我把这些离开我得到的错误是这样的:

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

我很新的Java代码,并可能建立类错误的方式,有没有办法解决这个错误或有我想要的功能?

回答

0

我只是找到了一种方法做我想要使用尼科夫发布的代码的修改版本,它允许较短版本的功能像我想:

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

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

} 
+0

谢谢,我试图避免使用try,catch和new Robot()的需求。基本上我想缩短这些功能,并使它们类似于你可以在网上找到的机器人类的例子,他们使用一个.java文件。就像我贴近错误信息的末尾那样,是否可以在课堂上使用? – zeddex 2012-08-01 01:25:38

+0

我想我会设置它如何建议,所以我已经接受了你的答案,它会很高兴能够避免每个功能的try catch,但我想这是不可能在一个类中。谢谢您的帮助。 – zeddex 2012-08-01 01:38:12

+0

实际上已经测试过你的代码,它给了我错误。新的Robot()和AWTException在eclipse中突出显示。任何想法如何纠正? – zeddex 2012-08-01 01:50:00

1

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

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

+0

欢迎来到SO。尝试通过添加代码例如你的说法来改善你的答案:) – 2014-09-30 14:48:00

+0

非常感谢...很快就会相处融洽..你很好,菲利克斯 – Positive 2014-09-30 14:53:34