gpt4 book ai didi

java - 如果操作不是由用户触发的,如何禁用 SWT 事件监听

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:49 25 4
gpt4 key购买 nike

我注意到,无论操作是由用户还是系统本身引起的,都会触发 ModifyListener,例如,

Text t = new Text(shell, SWT.BORDER);
t.addModifyListener(new TModifyListener());

................................................

private class TModifyListener implements ModifyListener
{

@Override
public void modifyText(ModifyEvent event)
{

Text text = (Text) event.widget;
t.setText(process(text.getText()));
}
}

这会造成死循环,使程序崩溃。你们知道如何在事件由系统生成时禁用事件监听,而在事件由用户引起时启用吗?

最佳答案

难道你不能在你的监听器中设置一个 ThreadLocal 并在它重新进入时检查它吗?

编辑:事实上,它甚至不需要是 ThreadLocal,因为 SWT 是单线程的。只需在监听器上设置一个 boolean 字段。

private class TModifyListener implements ModifyListener {

private boolean _setting;

@Override
public void modifyText(ModifyEvent event)
{
if(!_setting) {
_setting = true;
try {
Text text = (Text) event.widget;
t.setText(process(text.getText()));
} finally {
_setting = false;
}
}
}
}

关于java - 如果操作不是由用户触发的,如何禁用 SWT 事件监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1495761/

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