gpt4 book ai didi

java - 如何创建自己的事件。当传感器的值发生变化时如何调用方法?

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:05 24 4
gpt4 key购买 nike

我目前正在使用 LeJOS Ev3 库并编写了以下监听器:

    import lejos.hardware.port.Port;
import robots.ev3.drive.parts.LightSensor;

public abstract class LightListener {
protected int trigger;
protected boolean dark;

public LightListener(int triggerLevel) { trigger = triggerLevel; }
public void notify(LightSensor s) {
// Depending on the value that s measures, either the method
// dark or bright is called
}
public void initialValue(int level) {
dark = level < trigger;
}

abstract public void bright(Port port, int level);
abstract public void dark(Port port, int level);
}

正如您所看到的,有一个名为“notify”的方法,它应该根据传感器测量的内容来调用不同的方法。我希望能够仅在传感器测量的值发生变化时调用通知方法,而不使用不断检查值是否发生变化的 while 循环。但我想不出或找不到实现这一目标的方法。

我唯一想到的就是启动一个运行此代码的线程:

    while(true) {
waitForSensorValueToChange();
listener.notify(sensor);
}

但是,我什至不知道是否可以等待事件发生(无需不断检查值)。

编辑 - 由于已经多次向我建议,我会提到我已经在我的 LightSensor 上添加了一个名为 addLightListener(LightListener Listener) 的方法。这并不能解决我避免轮询的问题。

最佳答案

不熟悉该库,但您的两个基本选项是轮询(到目前为止您已经尝试过的)或使用 observer pattern .

在观察者模式中,当事件发生时,您会通知已注册到提供程序的任何类。

class ObserveMe {
List<Observer> observers = new ArrayList<>();

public updateSensorValue(){
//do what you need to
for(Observer observer : observers){
observer.notify();
}
}

public void addObserver(Observer o){
this.observers.add(o);
}
}

interface Observer {
public void notify();
}

关于java - 如何创建自己的事件。当传感器的值发生变化时如何调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35303254/

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