Diese besondere Linie in einem Verfahren zur Herstellung eines NPE wirft, und ich bin auf sich zwei Tage lang fest:NPE in generischen Array mit Liste Schnittstelle
List<Peak>[] peaks = (List<Peak>[]) new ArrayList[samples.length/Spectra.spectraInterval];
Das Verfahren, bei dem die Leitung auftritt:
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;
}
Diese Methode ist Teil einer Klasse Extractor, die den Zeitunterschied extrahiert, der für zwei Peaks erforderlich ist, um sie in eine Sonde zu paaren. Meine Frage ist:
- Ist die Peak-Objekt-Erstellung falsch? oder die Konvertierung in ArrayList falsch?
- Ist die NPE aufgrund von proples.length (in einer anderen Klasse deklariert) null?
Pl Hilfe. Ich bin neu in Java und arbeite mich nur durch einen Shazam-ähnlichen Code, der eine Audiodatei-Eingabe hat - versuche, das durch einen Mikrofoneingang in einer anderen Klasse zu ersetzen.
Ich würde überprüfen, ob 'samples' ist nicht' null' in Ihrem Debugger. –
Spectra.spectraInterval ist ein primitiver oder ein Wrapper? Ein Null Wrapper kann auch eine NPE werfen. PS: keine Notwendigkeit, die Array-Liste zu werfen, auch für Array) – AxelH
Poste ein [MCVE]: posten Sie das absolute Minimum, um Ihr Problem zu zeigen. (Schreiben eines minimalen Fall ist eine gute Debugging-Technik. Damit Sie wahrscheinlich Ihr Problem lösen.) – c0der