gpt4 book ai didi

java - 在鼠标按下事件中启动 "asyncExec"会导致阻塞行为

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

有一个“下一个”按钮,当我在选择按钮的情况下按下键盘回车键时,按钮的 widgetSelected 事件被一次又一次地重复调用,然后执行超快的下一步。这正是我想要的行为,但只发生在键盘输入键时。

我希望在按住鼠标单击时通过单击鼠标来实现该行为。当尝试用鼠标点击做同样的事情时,行为是不一样的,它只进行一次事件调用,当点击结束时(UP)。如何用鼠标点击来模拟同样的行为?

我尝试这样做,但它会阻塞 UI(不明白为什么)并且 mouseUp 永远不会被调用,它会在 while 中永远阻塞:

    button.addMouseListener(new MouseAdapter() {
boolean mouseDown;
@Override
public void mouseDown(MouseEvent e) {
System.out.println("mouseDown");
mouseDown = true;
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
while (mouseDown) {
System.out.println("Doing next in mouseDown");
next(composite, label_1);
synchronized(this){
try {
wait(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});

}
@Override
public void mouseUp(MouseEvent e) {
System.out.println("mouseUp");
mouseDown = false;
}
});

最佳答案

你给 asyncExecRunnable 在 UI 线程中运行。您必须永远不要在 UI 线程中进行任何类型的等待,因为这会阻塞 UI,直到它完成。

因此您不能运行这样的循环,因为它只会阻塞 UI。由于循环永远不会返回到主 SWT readAndDispatch 循环,因此不会执行任何 UI 操作。

而是使用 DisplaytimerExec 方法来安排 Runnable 在给定时间间隔后运行。此 runnable 应执行操作的一个步骤并使用 timerExec 稍后安排下一步。

关于java - 在鼠标按下事件中启动 "asyncExec"会导致阻塞行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53232484/

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