Java 使用不同的值多次调用方法

Java 使用不同的值多次调用方法,java,Java,我正在编写一些代码来控制一个储物柜系统,其中我想定义将打开哪个储物柜,并将值设置为X和Y参数(假设储物柜被安排为矩阵X,Y)。我已经用一个(X,Y)值测试了该方法,它运行良好,但当我尝试使用新值时,它实际上更新了值。有人能告诉我我做错了什么吗?实际上,我对java还不熟悉。代码是这样的。这是我第一次在这里发帖,如果我犯了一些错误,很抱歉。提前谢谢 public class MainApp extends Application{ ... LockerControl(3,

我正在编写一些代码来控制一个储物柜系统,其中我想定义将打开哪个储物柜,并将值设置为
X
Y
参数(假设储物柜被安排为
矩阵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;
    }

}

您将
静态int
用于
计数器
静态布尔值
用于
flagSensor
,但您有多个
LockerControl
实例。静态变量对于类的所有实例都是通用的(请参见)。可以通过删除“静态”修改器来修复此问题


请注意,如果不同的线程可以修改单个
LockerControl
实例,请查看和/或类。

对于
计数器
使用
静态int
,对于
flagSensor
使用
静态布尔值
,但是您有多个
LockerControl
实例。静态变量对于类的所有实例都是通用的(请参见)。可以通过删除“静态”修改器来修复此问题


请注意,如果不同的线程可以修改单个
LockerControl
实例,请查看和/或类。

I从int和counter中删除了static,但它仍然重复第一个参数(在示例中为2,1)。例如,在Java中,可以多次调用LockerControl(X,Y),只更改(X,Y)值?
尝试{Thread.sleep(10000);}catch(InterruptedException ex)
服务的目的是什么?为什么不在catch中记录任何内容?我打算在第一次和第二次调用LockerControl(X,Y)之间设置一个10秒的计时器。也许我可以只为Thread.sleep(10000)更改它。很难说还有什么原因,但另一个地方是要查看的
PCA9685GpioTester
类,用于我在回答中提到的相同问题。我从int和counter中删除了static,但它仍然重复第一个参数(在示例中为2,1)。例如,在Java中,可以多次调用LockerControl(X,Y),只更改(X,Y)值?
尝试{Thread.sleep(10000);}catch(InterruptedException ex)
服务的目的是什么?为什么不在catch中记录任何内容?我打算在第一次和第二次调用LockerControl(X,Y)之间设置一个10秒的计时器。也许我可以改为Thread.sleep(10000)。很难说还有什么其他原因,但另一个地方可以看的是
PCA9685GpioTester
类,这与我在回答中提到的问题相同。