2016-08-01 56 views
0

我已經連接我的arduino代碼串行處理。我得到一個運行時錯誤,說明處理中的NullPointerException。如何在處理中擺脫NullPointerException?

import processing.serial.*; 

Serial myPort; 
String val ; 
int[] colour_val ; 


void setup(){ 

    size(500,500); 
    String portName = Serial.list()[0]; 
    myPort = new Serial(this, portName, 9600); 
} 

void draw(){ 
    if (myPort.available() >0){ 

     val = myPort.readStringUntil('\n'); 
    } 
    if (val != null){ 
     append(colour_val,val); 
     for (float v : colour_val) 
     background(v); 
    } 
} 

回答

0

看這個變量:

int[] colour_val; 

你不給它的值,所以默認它沒有什麼,或者null值。

現在看這條線:

append(colour_val, val); 

你傳遞nullappend()功能。您可能期望添加該值,以便您擁有單索引數組,但這不是它的工作原理。你不能通過null進入這個功能,或者你會得到一個NullPointerException

要解決該問題,只是初始化變量colour_val一個空數組,而不是null

int[] colour_val = new int[0]; 

但你修復之後也有另一個問題。 append()函數實際上並沒有改變你傳入它的數組。相反,它會創建一個新數組並返回它。你必須將這個新數組存儲到一個變量中。你可以把它存回同一個變量:

colour_val = append(colour_val,val); 

更多信息可在the reference找到。

這是不是真的關係到你的問題,但看這一段代碼:

for (float v : colour_val) 
    background(v); 

這並不真正使一個很大的意義。比方說,你在你的colour_val排列3倍的值:0,128,和255這個循環就像調用background()功能3次連續:

background(0); 
background(128); 
background(255); 

但要注意的是,前兩個電話給background()不要」不要做任何事情,因爲你立即通過最後一次調用background()函數來吸引他們。用戶只會看到最後一次撥打background(),所以你真的不需要這個循環。