【发布时间】:2014-06-28 22:32:30
【问题描述】:
我正在编写一个 JavaFX 控制器,它每 5 秒移动一次鼠标。此控制器在执行此操作时还同时执行一些其他工作。因此,我为每个任务使用了单独的线程。以下是我的代码:
Thread dynamicMouseThread = new Thread(new Runnable() {
@Override
public void run() {
boolean isRunning = true;
long timeout = 5000;
int x = 5;
Robot robot = com.sun.glass.ui.Application.GetApplication().createRobot();
while (isRunning) {
try {
Thread.sleep(timeout);
} catch (InterruptedException ex) {
isRunning = false;
}
x = x == 5 ? x + 5 : 5;
robot.mouseMove(x, 5); // This line causes the error.
}
}
});
@Override
public void initialize(URL url, ResourceBundle rb) {
dynamicTimerThread.setName("Dynamic Timer Thread");
dynamicMouseThread.setName("Dynamic Mouse Thread");
dynamicTimerThread.start();
dynamicMouseThread.start();
}
这是我似乎得到的错误。请帮帮我。我做错了什么?
Exception in thread "Dynamic Mouse Thread" java.lang.IllegalStateException: This operation is permitted on the event thread only; currentThread = Dynamic Mouse Thread
at com.sun.glass.ui.Application.checkEventThread(Application.java:427)
at com.sun.glass.ui.Robot.<init>(Robot.java:52)
at com.sun.glass.ui.win.WinRobot.<init>(WinRobot.java:33)
at com.sun.glass.ui.win.WinApplication.createRobot(WinApplication.java:205)
at main.SubDocumentController$1.run(SubDocumentController.java:56)
at java.lang.Thread.run(Thread.java:745)
【问题讨论】:
标签: java multithreading javafx