2011-11-16 20 views
0

我得到一個空點異常,並且我的Groovy shell不再指定它發生的位置。這說,有他們的3,發生在該行scans.each {item ->空指針異常Groovy

如果你敢第一個...:

use(groovy.time.TimeCategory) { 
new File('C:\\Users\\pro-services\\Documents\\ScanEngineDetailFake.log').eachLine { line -> 

    m = line =~ d 
    log = line 
    matcher = (log =~ /\d{2}:\d{2}:\d{2},\d{3}/) 

    matcher.count.times { 
    a = matcher[it] 

    if(a) { 
     if(!prevDate) { 
     prevDate = parseDate(a) 
    } 
    if (line ==~ c){ 
     starts ++ 
     prevDate = parseDate(a) 
    } 
    if (line ==~ d){ 
     finishes ++ 
     def nextDate = parseDate(a) 
     deltas << nextDate - prevDate 
     scans << line 
    } 
    } 
} 

def startDate = null 
def finDate = null 
def filediff = null 

76 use(groovy.time.TimeCategory) { 

78 scans.each { item -> 

    logs = item 
    matcher = (logs =~ /\d{2}:\d{2}:\d{2},\d{3}/) 

83 matcher.count.times { 
    b = matcher[it] 

    if (logs ==~ c){ 
     startDate = parseDate(b) 
    } 

    if (logs ==~ d){ 
     finDate = parseDate(b) 

96  filediff = finDate - startDate 

     deltas.each { diff -> 
     if (diff == filediff){ 
      n = logs =~ c 
      println n[0][1] 
      println diff  
     }  
     } 
    } 
    } 
} 

任何想法?我一直在尋找其他的空指針問題,但它們看起來都是特定於代碼的,所以我想我只是將它添加到庫中。

+0

掃描定義在哪裏?我只看到你試圖把事情付諸實踐,但我不知道「它」是什麼。 –

+0

哦,掃描是一個空的列表中定義的原始但上面我開始引用。我會在週四修復它在工作:) – blaughli

回答

1

NullPointerException on line scans.each 表示scans是空引用。 scans尚未初始化correclty。應該有這樣一行:def scan = []之前,所以scan被初始化爲一個空列表。如果你寫了def scan,掃描被初始化爲一個空指針。

+1

或者你可以做'掃描?.each {項目 - >'使用空安全運算符 –

+0

我認爲在他的程序掃描中的這一點上一定不能爲空。它在這裏崩潰,因爲它沒有進入填充列表的條件,否則它會拋出'掃描<<線' – Antoine

+0

我同意,但'scans?.each'會顯示沒有結果,所以注意力會轉向爲什麼匹配器不工作,然後當那個工作時,注意力轉向爲什麼'null << line'崩潰。我不是不同意你的回答,我只是指出另一種可能的途徑採取 –