[英]Calling a method multiple times with different values
我正在执行一些代码来控制一个储物柜系统,在其中我想定义将打开的储物柜,将值设置为X
和Y
参数(假设储物柜排列为matrix X,Y
)。 我已经用一个(X,Y)
值测试了该方法,并且效果很好,但是当我尝试使用新值时,它实际上更新了值。 有人可以告诉我我在做什么错吗? 我实际上是Java新手。 代码就是这样。 这是我第一次在这里发布信息,对不起,如果我出错了。 提前致谢。
public class MainApp extends Application{
...
LockerControl(3, 0);
LockerControl(1, 1);
}
private void LockerControl(int X,int Y) throws Exception {
LockerControl locker = new LockerControl();
locker.count(X, Y);
Thread.sleep(10000);
locker.reset();
}
public class LockerControl {
int counter;
boolean flagSensor;
public void count(int X, int Y) throws Exception{
final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalOutput myLed[] = {
gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04, "LED_1", PinState.LOW),
gpio.provisionDigitalOutputPin(RaspiPin.GPIO_05, "LED_2", PinState.LOW),
gpio.provisionDigitalOutputPin(RaspiPin.GPIO_06, "LED_3", PinState.LOW)};
PCA9685GpioTester pca9685Gpio = new PCA9685GpioTester();
GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02);
myButton.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(
GpioPinDigitalStateChangeEvent event) {
if (event.getState().isHigh()) {
if (!flagSensor) {
myButton.addTrigger(new GpioPulseStateTrigger(myLed[1], 1000));
++counter;
if (counter == X+1) {
flagSensor = true;
try {
pca9685Gpio.on(X, Y);
} catch (Exception ex) {
Logger.getLogger(LockerControl.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
else {
myButton.addTrigger(new GpioPulseStateTrigger(myLed[2], 1000));
--counter;
if (counter == 0 && flagSensor) {
try {
pca9685Gpio.off(X, Y);
} catch (Exception ex) {
Logger.getLogger(LockerControl.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} else {
myButton.addTrigger(new GpioSetStateTrigger(myLed[0], PinState.LOW));
myButton.addTrigger(new GpioSetStateTrigger(myLed[1], PinState.LOW));
myButton.addTrigger(new GpioSetStateTrigger(myLed[2], PinState.LOW));
}
}
});
}
public void reset() {
counter = 0;
flagSensor = false;
}
}
您正在为counter
使用static int
,为flagSensor
使用static boolean
,但是您拥有多个LockerControl
实例。 静态变量是类的所有实例所共有的(请参见此处 )。 您可以通过删除static修饰符来解决此问题。
请注意,如果不同的线程可以修改单个LockerControl
实例,请查看并发和/或Atomic Integer和Atomic布尔类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.