2015-09-06 2 views
0

Я пытаюсь вызватьВызов функции в главном классе из другого класса в Java

public synchronized void refreshGPIOPinState() 

в пакете com.rpi.rpi_gpio_controller; (это основная)

из пакета 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 изменить состояние изображения.

+0

Можете ли вы включить полную стопку? – Mureinik

+0

Существует слишком маленький контекст, чтобы быть уверенным, но похоже, что mApplication является нулевым, когда код выполняется. – ash

+0

mApplication - null. Проверьте объект создан для этого класса .. –

ответ

1

Вы объявили поле:

private Rpi_gpio_controllerApplicationUI mApplication; 

Но ты ничего к ней не задействуется. Таким образом, ссылка mApplication не указывает на какой-либо объект, следовательно, исключение NullPointerException.

Вам необходимо создать/получить экземпляр Rpi_gpio_controllerApplicationUI и назначить его mApplication (например, в конструкторе).

Смежные вопросы