gpt4 book ai didi

java - 无法从事件调度程序线程调用方法

转载 作者:行者123 更新时间:2023-11-30 08:05:25 24 4
gpt4 key购买 nike

<分区>

我正在编写一个记录用户鼠标移动和点击的程序,并使用 Robot 类播放它们。

我遇到了这个错误:

线程“AWT-EventQueue-0”java.lang.IllegalThreadStateException 中的异常:无法从事件调度程序线程调用方法

我已经阅读了有关 EDT 的所有内容,人们一直在向您提到必须在另一个线程中运行它才能退出 EDT。

我的问题是:即使我使用了一个新线程,为什么我的代码还是不能工作?

代码如下:

void doAction(Robot robert) {
int x = ((MouseEvent) event).getXOnScreen();
int y = ((MouseEvent) event).getYOnScreen();
Thread safe = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(SwingUtilities.isEventDispatchThread());
MouseEvent m = (MouseEvent) this.event; // event is the recording of the click
robert.mouseMove(x, y); // error traces back to here
leftClick(robert);
}
});
safe.run();
}

System.out.println(SwingUtilities.isEventDispatchThread()); 打印 true

整个类代码在这里:

class RoboMouseClick extends RoboAction {

AWTEvent event;

public RoboMouseClick(String mouse, int MOUSE_MOVE, AWTEvent event,
long timeStamp) {
super(mouse, MOUSE_MOVE, timeStamp);
this.event = event;
}

private void leftClick(Robot robot)
{
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.delay(200);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(200);
}

void doAction(Robot robert) {
int x = ((MouseEvent) event).getXOnScreen();
int y = ((MouseEvent) event).getYOnScreen();
Thread safe = new Thread(() -> {
System.out.println(SwingUtilities.isEventDispatchThread());
MouseEvent m = (MouseEvent) event;
robert.mouseMove(x, y);
leftClick(robert);
});
safe.run();
}
}

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com