Почему JavaFX вызывает исключение IllegalStateException при создании объекта Robot? ⇐ JAVA
-
Гость
Почему JavaFX вызывает исключение IllegalStateException при создании объекта Robot?
Я создаю приложение и мне нужна функция, в которой, когда пользователь нажимает E, указатель мыши будет устанавливаться в центр экрана (с помощью moveMouse()< /код> метод). Однако это просто выдает IllegalStateException.
Вместо этого я попробовал использовать GlassRobot (из этого вопроса с принятым ответом), но вместо этого я получил только IllegalAccessException. Что я делаю не так? Нужно ли мне что-то включать?
Код и ошибка IllegalStateException
Примечание. Внизу есть комментарий
Исключение в потоке "main" java.lang.reflect.InvocatingTargetException в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) в java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.base/java.lang.reflect.Method.invoke(Method.java:568) по адресу java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1082) Вызвано: java.lang.ExceptionInInitializerError в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) в java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.base/java.lang.reflect.Method.invoke(Method.java:568) по адресу javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs (LauncherImpl.java:465) по адресу javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication (LauncherImpl.java:364) ... еще 5 Вызвано: java.lang.IllegalStateException: эта операция разрешена только в потоке событий; currentThread = основной в javafx.graphics/com.sun.glass.ui.Application.checkEventThread(Application.java:447) по адресу javafx.graphics/javafx.scene.robot.Robot.(Robot.java:70) at com.galactify.tiles/com.galactify.tiles.HelloApplication.(HelloApplication.java:37) // Здесь создается объект Robot ... еще 11 Декларация робота сцены private static Final Robot robot = new Robot() ; Декларация GlassRobot private static Final Robot = Robot robot = com.sun.glass.ui.Application.GetApplication().createRobot() ; Методы, используемые для установки указателя мыши в центр, когда пользователь нажимает E static void onKeyReleased(KeyEvent evt) { Ключ KeyCode = evt.getCode() ; out.println(клавиша + "отпущена"); переключатель (ключ) { случай F11 -> { stage.setFullScreen(!isFullscreen) ; isFullscreen = !isFullscreen; } случай C -> { стадия.закрыть() ; isClosed = Истина; } случай E -> setupInventory() ; } } static void setupInventory() { robot.mouseMove((double) screenWidth / 2, (double) screenHeight / 2) ; }
Я создаю приложение и мне нужна функция, в которой, когда пользователь нажимает E, указатель мыши будет устанавливаться в центр экрана (с помощью moveMouse()< /код> метод). Однако это просто выдает IllegalStateException.
Вместо этого я попробовал использовать GlassRobot (из этого вопроса с принятым ответом), но вместо этого я получил только IllegalAccessException. Что я делаю не так? Нужно ли мне что-то включать?
Код и ошибка IllegalStateException
Примечание. Внизу есть комментарий
Исключение в потоке "main" java.lang.reflect.InvocatingTargetException в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) в java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.base/java.lang.reflect.Method.invoke(Method.java:568) по адресу java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1082) Вызвано: java.lang.ExceptionInInitializerError в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) в java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.base/java.lang.reflect.Method.invoke(Method.java:568) по адресу javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs (LauncherImpl.java:465) по адресу javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication (LauncherImpl.java:364) ... еще 5 Вызвано: java.lang.IllegalStateException: эта операция разрешена только в потоке событий; currentThread = основной в javafx.graphics/com.sun.glass.ui.Application.checkEventThread(Application.java:447) по адресу javafx.graphics/javafx.scene.robot.Robot.(Robot.java:70) at com.galactify.tiles/com.galactify.tiles.HelloApplication.(HelloApplication.java:37) // Здесь создается объект Robot ... еще 11 Декларация робота сцены private static Final Robot robot = new Robot() ; Декларация GlassRobot private static Final Robot = Robot robot = com.sun.glass.ui.Application.GetApplication().createRobot() ; Методы, используемые для установки указателя мыши в центр, когда пользователь нажимает E static void onKeyReleased(KeyEvent evt) { Ключ KeyCode = evt.getCode() ; out.println(клавиша + "отпущена"); переключатель (ключ) { случай F11 -> { stage.setFullScreen(!isFullscreen) ; isFullscreen = !isFullscreen; } случай C -> { стадия.закрыть() ; isClosed = Истина; } случай E -> setupInventory() ; } } static void setupInventory() { robot.mouseMove((double) screenWidth / 2, (double) screenHeight / 2) ; }
Мобильная версия