JNA: Strukturen erzeugen

UweA

Mitglied
Hallo,

ich habe ein Problem damit, unter Java/JNA Strukturen anzulegen und darauf zuzugreifen.
"Problem" heißt, beim Zugriff auf ein Strukturelement bekomme ich eine NullPointerException.

Mein Code:

Code:
class sPeaks extends Structure {
	public double Frequency;
}

class sAudioStatistics extends Structure {
	public double THD;
	public sPeaks[] Peaks = new sPeaks[4096];
} 

...

  sAudioStatistics[] AudioStatistics = new sAudioStatistics[1000];
  System.out.println("AS:" + AudioStatistics.length);
  AudioStatistics[1].THD= 1.0;

Die letzte Zeile "AudioStatistics[1].THD= 1.0;" löst die exception aus.
Kann mir einer sagen, warum?
Das println liefert: "AS: 1000"

Grüße,
Uwe
 

X5-599

Top Contributor
Für mich sieht das einfach so aus als wenn du keine Instanzen deiner sAudioStatistics Klasse erzeugst. Du baust nur ein Array diesen Typs. Das hat zwar die Länge 1000, ist aber nicht befüllt. Sprich es sind 1000 mal "null" vorhanden. Du versuchst nun auf eines dieser nulls zuzugreifen und das ergibt die NullPointerException.

Ich sehe im Moment auch nicht wo JNA zum Einsatz kommt... Das ist aber, muss ich gestehen, auch kein Gebiet mit dem ich mich gut auskenne.
 

VfL_Freak

Top Contributor
Moin,
"AudioStatistics[1].THD= 1.0;" löst die exception aus.
Kann mir einer sagen, warum?
Das println liefert: "AS: 1000"
X5 hat Recht! Du greifst mit auf ein nicht gefülltes Array zu!
Das println liefert Dir ja 'nur' die Größe des Arrays ... sagt aber nix drüber aus, ob die einzelnen Stellen null sind oder nicht !

Gruß
Klaus
 

UweA

Mitglied
Dank des Hinweises mit der Instanzierung habe ich es jetzt lösen können:
Java:
	public static class sPeaks extends Structure {
		public double Frequency;
	}

	public static class sAudioStatistics extends Structure {
		public double THD;
		public sPeaks[] Peaks = new sPeaks[4096];
	} 

  sAudioStatistics[] AudioStatistics = new sAudioStatistics[1000];
  System.out.println("AS:" + AudioStatistics.length);
  AudioStatistics[1] = new sAudioStatistics();
  AudioStatistics[1].THD = 1.0;

Dazu waren drei Änderungen notwendig:
1. Die Zeile "AudioStatistics[1] = new sAudioStatistics();" instanziert das Arrayelement.
Danach treten dann Folgefehler auf, die sich wie folgt lösen lassen:
2. Der Zusatz "public" bei den Strukturen löst den JNA-Fehler "Class com.sun.jna.Structure can not access a member..."
3. Der Zusatz "static" bei den Strukturen löst den Fehler "Must qualify the allocation with an enclosing instance of type.."

Grüße,
Uwe
 

VfL_Freak

Top Contributor
Moin,
oh oh, da ist jetzt aber einiges krumm ..... ;(

Java:
	public static class sPeaks extends Structure {
		public double Frequency;
	}

	public static class sAudioStatistics extends Structure {
		public double THD;
		public sPeaks[] Peaks = new sPeaks[4096];
	} 

  sAudioStatistics[] AudioStatistics = new sAudioStatistics[1000];
  System.out.println("AS:" + AudioStatistics.length);
  AudioStatistics[1] = new sAudioStatistics();
  AudioStatistics[1].THD = 1.0;

Dazu waren drei Änderungen notwendig:
1. Die Zeile "AudioStatistics[1] = new sAudioStatistics();" instanziert das Arrayelement.
Danach treten dann Folgefehler auf, die sich wie folgt lösen lassen:
2. Der Zusatz "public" bei den Strukturen löst den JNA-Fehler "Class com.sun.jna.Structure can not access a member..."
3. Der Zusatz "static" bei den Strukturen löst den Fehler "Must qualify the allocation with an enclosing instance of type.."
Erstens: Du instantiierst jetzt ja nur das zweite (!!) Element des Arrays, die restlichen 999 noch immer nicht - sie sind also immer noch NULL !!
Zweitens: auf dein Array 'Peak' ist an allen 4096 Stellen NULL !!

Zu den Folgefehlern kann man ich Dir nichts weiter sagen (außer 'erstens' !!), da ich die JNA-Strukturen nicht kenne ...

Gruß
Klaus
 

UweA

Mitglied
Moin Klaus,

vielen Dank für den Hinweis.
Das mit den fehlenden 999 Array-Elementen wusste ich, aber mein Peak-Array war mir durch die Lappen gegangen.
Neuer Versuch:
Java:
  sAudioStatistics[] AudioStatistics = new sAudioStatistics[StatSize];
  for (i=0; i<StatSize; i++)
  {	
     AudioStatistics[i] = new sAudioStatistics();
     AudioStatistics[i].Peaks[i] = new sPeaks(); 
  }

Die Varable StatSize wird natürlich vorher mit einem Wert belegt.

Grüße und Danke,
Uwe
 

VfL_Freak

Top Contributor
Das mit den fehlenden 999 Array-Elementen wusste ich, aber mein Peak-Array war mir durch die Lappen gegangen.
Neuer Versuch:
Java:
  sAudioStatistics[] AudioStatistics = new sAudioStatistics[StatSize];
  for (i=0; i<StatSize; i++)
  {	
     AudioStatistics[i] = new sAudioStatistics();
     AudioStatistics[i].Peaks[i] = new sPeaks(); 
  }
Die Varable StatSize wird natürlich vorher mit einem Wert belegt.
:toll: :applaus:
und nun ??

Gruß
Klaus
 

UweA

Mitglied
Sorry. :)

Nun funktioniert es!

Jetzt bekomme ich zwar von JNA eine Fehlermeldung, dass die Elemente des Arrays nicht kontinuierlich im Speicher liegen, aber da forsche ich noch drauf herum.

Gruß,
Uwe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J XML-Strukturen für REST-Service erstellen Java Basics - Anfänger-Themen 1
D Methoden Mathematische Strukturen in Java umwandeln Java Basics - Anfänger-Themen 10
M Verschachtelte Strukturen. Java Basics - Anfänger-Themen 7
G Strukturen Java Basics - Anfänger-Themen 2
G Strukturen in Java Java Basics - Anfänger-Themen 2
M in Textfile Strukturen erkennen Java Basics - Anfänger-Themen 5
S Strukturen in Java Java Basics - Anfänger-Themen 9
T komplexe Strukturen in Servlet-Context speichern möglich? Java Basics - Anfänger-Themen 5
J Keine Strukturen in Java Java Basics - Anfänger-Themen 9
W Javadoc HTML erzeugen mit allen dependency Java Basics - Anfänger-Themen 11
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Erzeugen einer eindeutigen ID Java Basics - Anfänger-Themen 2
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
L Simples Spielfeld erzeugen Java Basics - Anfänger-Themen 1
G Anklickbaren Text erzeugen Java Basics - Anfänger-Themen 2
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
S Mit nextGaussian() positive Zahlen erzeugen? Java Basics - Anfänger-Themen 39
S Array erzeugen mit verschiedener Verteilung Java Basics - Anfänger-Themen 11
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
L Dynamische Anzahl an Arrays mit verschiedenen Namen erzeugen Java Basics - Anfänger-Themen 6
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
K Methoden JTExtField mit Array erzeugen Java Basics - Anfänger-Themen 13
B Kann man eine Tabelle in Eclipse erzeugen und damit arbeiten? Java Basics - Anfänger-Themen 8
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
I TextField Array mit for Loop erzeugen Java Basics - Anfänger-Themen 4
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
G Objekt der selben Klasse wie selbst mit Aufrufen des Konstruktors erzeugen Java Basics - Anfänger-Themen 14
J Eindeutige Nummer (8 stellig) erzeugen Java Basics - Anfänger-Themen 9
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
B OOP Objekt in IF erzeugen - funktioniert nicht so richtig Java Basics - Anfänger-Themen 11
neerual Int-Felder erzeugen Java Basics - Anfänger-Themen 16
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
D Erste Schritte Random erzeugen Java Basics - Anfänger-Themen 28
P Objekt mit =new in Methode erzeugen Java Basics - Anfänger-Themen 4
L Threads Laufbild Erzeugen Problem mit Aktualisieren des JPanels Java Basics - Anfänger-Themen 2
J In Java einen Ton erzeugen Java Basics - Anfänger-Themen 8
C Array Muster erzeugen Java Basics - Anfänger-Themen 2
S Objekte "gegebenfalls" erzeugen Java Basics - Anfänger-Themen 5
D Java Ausdruck erzeugen / Formular Java Basics - Anfänger-Themen 4
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
R Baum erzeugen Java Basics - Anfänger-Themen 61
D Objekt per If erzeugen. Java Basics - Anfänger-Themen 11
J Bildschirmausgabe erzeugen Java Basics - Anfänger-Themen 30
B Beliebig viele Rechtecke erzeugen Java Basics - Anfänger-Themen 5
J Objekt mit Methodendruchlauf erzeugen Java Basics - Anfänger-Themen 1
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
P Erste Schritte [gelöst]Erzeugen einer Klasse aus der Klassenbibliothek Java Basics - Anfänger-Themen 4
C Int mit vorangestellten Nullen und maximal 4 stellen erzeugen. Java Basics - Anfänger-Themen 4
P Input/Output Objekte per Eingabe erzeugen Java Basics - Anfänger-Themen 1
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
S Variablen Variable erzeugen und Array mit Variablen befüllen Java Basics - Anfänger-Themen 26
S Header- Datei erzeugen mit javah Java Basics - Anfänger-Themen 1
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
R Erste Schritte Schleife erzeugen (mit If Anweisung) Java Basics - Anfänger-Themen 3
I HTML Tabelle nur so lange erzeugen bis Höhe erreicht Java Basics - Anfänger-Themen 9
M Zusatzzahlen in array erzeugen Java Basics - Anfänger-Themen 5
B Stützstellen (Vektor) erzeugen? Java Basics - Anfänger-Themen 8
Z Erste Schritte 9x9 Felder Erzeugen+Aufrufen Java Basics - Anfänger-Themen 1
Y Variable Menge von Objekten erzeugen und mit ihren Attributen rechnen Java Basics - Anfänger-Themen 7
J Anzahl von for-Schleifen in Abhängigkeit von Zahleneingabe erzeugen Java Basics - Anfänger-Themen 1
J JLabels in schleife erzeugen mit verschiedenen namen? Java Basics - Anfänger-Themen 5
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
F Input/Output Blocking file read erzeugen Java Basics - Anfänger-Themen 0
Thallius Klassen aus Classname programmatisch erzeugen. Wie geht das in java? Java Basics - Anfänger-Themen 5
B Zufallsdatum innerhalb eines bestimmten Bereiches erzeugen Java Basics - Anfänger-Themen 3
D JComboBox erzeugen Java Basics - Anfänger-Themen 1
J Erste Schritte Array dyn. erzeugen Java Basics - Anfänger-Themen 2
A OOP Objekte per Schleife erzeugen Java Basics - Anfänger-Themen 1
F Superklasse nochmals erzeugen? Java Basics - Anfänger-Themen 7
G Instanzen eines Interfaces erzeugen Java Basics - Anfänger-Themen 7
M Variablen Variable zur Laufzeit erzeugen Java Basics - Anfänger-Themen 3
P Vererbung Neues Objekt aus Vorlage erzeugen Java Basics - Anfänger-Themen 1
M Erzeugen beliebig vieler Objekte, aber wie wechselnde Bezeichner? Java Basics - Anfänger-Themen 5
W Objekte erzeugen Java Basics - Anfänger-Themen 2
N Interface Interface (sinnvoll) erzeugen Java Basics - Anfänger-Themen 8
L 6stellige Zufallszahlen erzeugen & auf einzigartigkeit prüfen Java Basics - Anfänger-Themen 3
A Kleinste Ziffer im Array suchen um Sortierung zu erzeugen Java Basics - Anfänger-Themen 2
Joew0815 Interface JSON Objekte aus Java Objekten erzeugen Java Basics - Anfänger-Themen 9
B OOP Objekte erzeugen mit Hilfe einer for Schleife Java Basics - Anfänger-Themen 29
Helgon Baumstruktur tiefe N erzeugen Java Basics - Anfänger-Themen 3
X Mehrere Objekte erzeugen Java Basics - Anfänger-Themen 8
G OOP-Frage - Grundlegendes zum erzeugen von Klassen Java Basics - Anfänger-Themen 7
P Kapselung Variable innerhalb einer inneren Klasse ansprechen ohne ein Objekt erzeugen zu müssen? Java Basics - Anfänger-Themen 6
G Methoden BigInteger Zufallszahlen erzeugen Java Basics - Anfänger-Themen 5
Phash Kombinationen erzeugen Java Basics - Anfänger-Themen 4
M Initialisierungsblock beim Erzeugen einer Instanz Java Basics - Anfänger-Themen 6
B Ein Array von Map erzeugen, wie??? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben