Frage

Ich versuche, eine globale Robot Variable in einer Java-Klasse zu erstellen, ohne ein AWTException zu werfen. Der einzige Weg, die ich mit ihm kommen kann, ist durch die Ausnahme zu werfen. Der Grund, warum ich brauche es global zu sein, weil ich die gleiche Robot Variable in anderen Methoden in der Klasse verwenden muß.

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

Wenn ich nicht die Ausnahme werfen, ich brauche einen neuen Roboter in jedem Verfahren zu erklären.

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

Kann mir jemand helfen?

War es hilfreich?

Lösung

Sie einfach die throws AWTException Version verwenden, wie java.awt.Robot wirft nur diese Ausnahme, wenn GraphicsEnvironment.isHeadless() gilt.

Das bedeutet, Sie nicht Ihre Anwendung mit Roboter laufen können sowieso.

Andere Tipps

Gibt es einen Grund, warum Sie nicht die AWTException im Konstruktor fangen und werfen es in einem Runtime gewickelt?

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

verwenden, um einen statischen Initialisierer Block in Ihrer Robo-Klasse wie folgt aus:

public static Robot r;

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

Dies stellt sicher, dass der Roboter Klasse so schnell initialisiert, wie die JVM die Robo-Klasse-Datei

lädt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top