簡體   English   中英

多次調用具有不同值的方法

[英]Calling a method multiple times with different values

我正在執行一些代碼來控制一個儲物櫃系統,在其中我想定義將打開的儲物櫃,將值設置為XY參數(假設儲物櫃排列為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 IntegerAtomic布爾類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM