我目前正在使用 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) 的方法。这并不能解决我避免轮询的问题。