0
我想打電話給調用不同類在java中的主類的函數
public synchronized void refreshGPIOPinState()
在包com.rpi.rpi_gpio_controller; (這是主要的)
from package com.rpi.GPIOController; 與
mApplication.refreshGPIOPinState();
得到一個錯誤顯示java.lang.NullPointerException約行
package com.rpi.GPIOController;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.wiringpi.GpioInterrupt;
import com.pi4j.wiringpi.GpioInterruptEvent;
import com.pi4j.wiringpi.GpioInterruptListener;
import com.pi4j.wiringpi.Gpio;
import com.pi4j.wiringpi.GpioUtil;
import com.rpi.Utils.Utils;
import com.rpi.rpi_gpio_controller.Rpi_gpio_controllerApplicationUI;
public enum GPIOController {
INSTANCE(true);
final GpioController gpioController = GpioFactory.getInstance();
private Rpi_gpio_controllerApplicationUI mApplication ;
// The used GPIO pins
public GpioPinDigitalOutput[] mGPIOPins = new GpioPinDigitalOutput[1];
// ***************************************
// Constuctor
private GPIOController(boolean setLowOnExit) {
mGPIOPins[0] = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_00, "GPIO_Pin_" + 0, PinState.LOW);
if (setLowOnExit) {
// Set shutdown behavior for all pins
mGPIOPins[0].setShutdownOptions(true, PinState.LOW);
}
}
// ***************************************
// ***************************************
public void GetInput(int trigerpin, int outputpin) throws InterruptedException {
Utils.Output_WriteDebug(true, " GPIO Trigger ... started on " + trigerpin + " OutPutPin " + outputpin);
GpioInterrupt.addListener(new GpioInterruptListener() {
@Override
public void pinStateChange(GpioInterruptEvent event) {
Utils.Output_WriteDebug(true, "Raspberry Pi PIN [" + trigerpin + "] is in STATE [" + event.getState() + "]");
try {
mGPIOPins[outputpin].toggle();
mApplication.refreshGPIOPinState();
} catch (Exception e) {
e.printStackTrace();
}
}
});
// setup wiring pi
if (Gpio.wiringPiSetup() == -1) {
Utils.Output_WriteDebug(true, " ==>> GPIO SETUP FAILED");
}
// export all the GPIO pins that we will be using
GpioUtil.export(trigerpin, GpioUtil.DIRECTION_IN);
// set the edge state on the pins we will be listening for
GpioUtil.setEdgeDetection(trigerpin, GpioUtil.EDGE_BOTH);
// configure GPIO x as an INPUT pin; enable it for callbacks
Gpio.pinMode(trigerpin, Gpio.INPUT);
Gpio.pullUpDnControl(trigerpin, Gpio.PUD_DOWN);
GpioInterrupt.enablePinStateChangeCallback(trigerpin);
}
// ***************************************
}
當中斷髮生調用refreshGPIOPinState改變圖像的狀態。
可以包括完整的堆棧跟蹤嗎? – Mureinik
確實沒有太多上下文,但代碼執行時看起來像mApplication爲空。 – ash
mApplication爲空。檢查對象是爲該類創建的。 –