如何在不抛出AWTException的情况下创建全局Robot变量?

时间:2009-10-29 01:59:50

标签: java global-variables awtrobot

我正在尝试在Java类中创建一个全局Robot变量而不抛出AWTException。我能想出的唯一方法是抛出异常。我需要它是全局的原因是因为我需要在类中的其他方法中使用相同的Robot变量。

public class Robo{
    Robot r;

    public Robo() throws AWTException{
        r = new Robot();
    }

    public void useRobot(){       
        r.mouseMove(5, 5);
        r.toString();
    }

    public void useRobot2(){
        //r....some other things
    }
}

如果我不抛出异常,我需要在每种方法中声明一个新的Robot。

public class Robo{

    public Robo() {

    }

    public void useRobot(){
        try{
            Robot r = new Robot();
            r.mouseMove(5, 5);
            r.toString();
        }
        catch (AWTException e){}
    }

    public void useRobot2(){
        try{
            Robot r = new Robot();
            r...... //some other things
        }
        catch (AWTException e){}
    }
}

有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

是否有理由不能在构造函数中捕获AWTException并将其包装在RuntimeException中?

public Robo() {
    try {
        r = new Robot();
    } catch(AWTException e) {
        throw new RuntimeException("Failed to create java.awt.Robot for Robo instance", e);
    }
}

答案 1 :(得分:1)

只需使用throws AWTException版本,java.awt.Robot只会在GraphicsEnvironment.isHeadless()为真时抛出此异常。

这意味着无论如何都无法使用Robot运行您的应用程序。

答案 2 :(得分:0)

在Robo类中使用静态初始化程序块 像这样:

public static Robot r;

static
{
    try {
        r = new Robot();
    } catch(AWTException e){e.printStrackTrace();}
}

这确保一旦JVM加载Robo类文件

,就会初始化Robot类