Question

J'essaie de créer une variable globale Robot dans une classe Java sans générer une AWTException . La seule façon dont je peux y arriver est de lancer l'exception. La raison pour laquelle j'ai besoin qu'elle soit globale, c'est parce que je dois utiliser la même variable Robot dans les autres méthodes de la classe.

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

Si je ne lève pas l'exception, je dois déclarer un nouveau robot dans chaque méthode.

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

Quelqu'un peut-il m'aider?

Était-ce utile?

La solution

Il suffit d'utiliser la version de AWTException , sous la forme java.awt.Robot lève cette exception uniquement lorsque GraphicsEnvironment.isHeadless () est true.

Ce qui signifie que vous ne pouvez pas exécuter votre application avec Robot de toute façon.

Autres conseils

Y a-t-il une raison pour laquelle vous ne parvenez pas à saisir l'AWTException dans le constructeur et à l'insérer dans une exception RuntimeException?

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

utilisez un bloc d'initialisation statique dans votre classe Robo comme ceci:

public static Robot r;

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

Cela garantit que la classe Robot est initialisée dès que la machine virtuelle Java charge le fichier de classe Robo

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top