2016-03-21 87 views
0

這裏是控制檯登錄樹莓PI GPIO的Java代碼錯誤

[email protected]:/home/pi# java -jar /home/pi/keypad.jar 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:483) 
     at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.NullPointerException 
     at me.Andrew.Keypad.GPIO.GPIOMethords.setupPins(GPIOMethords.java:33) 
     at me.Andrew.Keypad.Listener.ButtonInput.ButtonListener(ButtonInput.java:45) 
     at me.Andrew.Keypad.Listener.ButtonInput.start(ButtonInput.java:22) 
     at me.Andrew.Keypad.Main.main(Main.java:15) 
     ... 5 more 
[email protected]:/home/pi# 
unavailable) 

下面是代碼

GPIOMethords

public class GPIOMethords { 
public Main MA; 
public Settings settings = new Settings(); 
final GpioController gpio = GpioFactory.getInstance(); 

public HashMap<String,GpioPinDigitalInput> ColPins = new HashMap<String,GpioPinDigitalInput>(); 
public HashMap<String,GpioPinDigitalOutput> RowPins = new HashMap<String,GpioPinDigitalOutput>(); 

public void setupPins(){ 
    if(ColPins.isEmpty()){ 
     ColPins.put("1",gpio.provisionDigitalInputPin(settings.Col1)); 
     ColPins.put("2",gpio.provisionDigitalInputPin(settings.Col2)); 
     ColPins.put("3",gpio.provisionDigitalInputPin(settings.Col3)); 
     ColPins.put("4",gpio.provisionDigitalInputPin(settings.Col4)); 
    } 
    if(RowPins.isEmpty()){ 
     RowPins.put("1",gpio.provisionDigitalOutputPin(settings.Row1)); 
     RowPins.put("2",gpio.provisionDigitalOutputPin(settings.Row2)); 
     RowPins.put("3",gpio.provisionDigitalOutputPin(settings.Row3)); 
     RowPins.put("4",gpio.provisionDigitalOutputPin(settings.Row4)); 
    } 
    MA.store.ColPins = ColPins; // line 33 
    MA.store.RowPins = RowPins; 
} 


} 

主要

public class Main { 
    private static Main instance = null; 

    public Settings set = new Settings(); 
    public static Methords Meths = new Methords(); 
    public GPIOMethords GPIOMeths = new GPIOMethords(); 
    public Storage store = new Storage(); 

    public static void main(String[] args) { 
      Meths.buttonIn.start(); 

    } 
    public static Main getInstance() { 
      if(instance == null) { 
      instance = new Main(); 
      } 
      return instance; 
     } 

} 

設置

public class Settings { 
public String Code = "ABCD"; 

//Define Row Pins! 
public Pin Row1 = RaspiPin.GPIO_00; 
public Pin Row2 = RaspiPin.GPIO_01; 
public Pin Row3 = RaspiPin.GPIO_02; 
public Pin Row4 = RaspiPin.GPIO_03; 

//Define Col Pins! 
public Pin Col1 = RaspiPin.GPIO_04; 
public Pin Col2 = RaspiPin.GPIO_05; 
public Pin Col3 = RaspiPin.GPIO_06; 
public Pin Col4 = RaspiPin.GPIO_07; 

} 
+0

如果你不張貼代碼沒有任何理由張貼錯誤/堆棧跟蹤.... –

回答

1

你真的不應該傳遞靜態變量或使用單身人士爲你的Main類,但你沒有初始化它,所以它是空的。

變化

public class GPIOMethords { 
    public Main MA; 

public class GPIOMethords { 
    public Main MA = Main.getInstance(); 
+0

新的錯誤http://pastebin.com/ ETfZ8idZ通過Pastebin添加時間太長,無法發表評論 –

+0

這個錯誤實際上是用一個字來描述的:StackOverflowError。你有'Main.getInstance()',它調用'新的Main()',因此調用'Main.getInstance()'...看到問題? –

+0

它只調用它,如果沒有設置if(instance == null){ –