在方法此特定線拋出NPE,並且我卡在它兩天:NPE與List接口通用陣列
List<Peak>[] peaks = (List<Peak>[]) new ArrayList[samples.length/Spectra.spectraInterval];
在其中線上發生的方法是:
public static List<Peak>[] getPeaks(AudioClip clip) {
double[] samples = clip.getSamples();
List<Peak>[] peaks = (List<Peak>[]) new ArrayList[samples.length/Spectra.spectraInterval];
peaks[0] = new ArrayList<Peak>();
for (int i = 1; i < peaks.length; i++) {
Spectra s = new Spectra(i, Arrays.copyOfRange(
samples,
i*Spectra.spectraInterval - Spectra.samplesPerSpectra/2,
i*Spectra.spectraInterval + Spectra.samplesPerSpectra/2
));
peaks[i] = s.getPeaks();
//System.out.println(peaks[i]);
}return peaks;
}
該方法是一個類的一部分,提取器提取兩個峯進行探測配對所需的時間差。我的問題是:
- Peak對象創建是否錯誤?或者轉換爲ArrayList錯誤?
- NPE歸因於samples.length(在另一個類中聲明)是否返回null?
PI help。我對Java很陌生,只是繞着一個帶有音頻文件輸入的Shazam代碼工作 - 嘗試用不同類中的麥克風輸入代替它。
我會檢查'samples'不是'null'在調試器。 –
Spectra.spectraInterval是一個基元還是一個包裝?一個空包裝器也可以拋出一個NPE。 PS:不需要投射數組列表,即使是陣列) – AxelH
發佈[MCVE]:發佈最低限度顯示您的問題。(寫一個最小的情況是一個很好的調試技術,這樣做很可能解決你的問題。) – c0der