Problem mit JNI und Thread

Status
Nicht offen für weitere Antworten.

Rock Lobster

Bekanntes Mitglied
Hallo!

Ich habe eine Methode über JNI als C++ Methode implementiert. Bisher hat alles wunderbar funktioniert, jedoch wollte ich jetzt die Methode innerhalb eines Threads aufrufen, damit währenddessen das Programm weiterlaufen kann.

Es wurde also rein der Aufruf in eine run()-Methode eines Threads verlegt, ansonsten hat sich nichts geändert.

Die Methode greift zudem auf ein Array zu, das innerhalb von Java definiert wird und in C++ mit env->GetPrimitiveArrayCritical() geholt wird. Dort wird das Array dann befüllt und innerhalb von Java wird es NUR gelesen, nicht geschrieben.

Naja, leider funktioniert das seit der Auslagerung in einen Thread so nicht mehr. Komischerweise funktioniert es beim ersten Aufruf, danach gibt es jedoch Probleme und die JavaVM stürzt ab.

Der Thread sowie die Arrays werden jedoch JEDESMAL neu erstellt, es wird also nie auf alte Objekte zugegriffen oder sowas - wie früher eben auch. Nur mit dem Unterschied, daß die Methode nun innerhalb eines Threads aufgerufen wird, der ansonsten aber nichts anstellt. Übrigens habe ich auch zwischenzeitlich mal sämtliche Lese-Operationen entfernt, sodaß die JNI-Methode tatsächlich NUR schreibt und hinterher mit diesem Array überhaupt nix mehr geschieht. Dennoch tritt beim zweiten Aufruf* ein Fehler auf (trotz dessen, daß sowohl Thread als auch Array gänzlich neue Objekte sind).

EDIT: * mit diesem zweiten Aufruf meine ich einfach nur den zeitlich gesehenen zweiten Aufruf, bei dem aber wie erwähnt ein völlig neues Array und ein völlig neuer Thread benutzt werden, und nicht die zuerst instanzierten.

Hier ein paar Code-Ausschnitte:

Code:
// das ist der neue Thread. Davor wurde die Methode buffer(...) außerhalb aufgerufen.

	private class BufferThread implements Runnable
	{
		private String fileName;
		private int[] tempBuffer;
		
		public BufferThread(String fileName, int[] tempBuffer)
		{
			this.fileName = fileName;
			this.tempBuffer = tempBuffer;
		}
		
		public void run()
		{
			buffer(fileName, sampleSize, tempBuffer, audioData, false);	
			System.out.println("finished buffering " + this.toString());
		}
	}


Code:
// diese Methode wird innerhalb des Main-Threads aufgerufen.
// Hier wurde ursprünglich die oben angesprochene buffer()-Methode
// aufgerufen (ist jetzt auskommentiert)

	protected void bufferAudioData(AudioInputStream inStream, String fileName) throws IOException
	{		
		int tempSize = sampleSize * inStream.getFormat().getFrameSize();
		int resultSize = (int) (inStream.getFrameLength() * inStream.getFormat().getFrameSize() / tempSize);
		audioData = new int[resultSize];
		int[] tempBuffer = new int[tempSize];
		
		//buffer(fileName, sampleSize, tempBuffer, audioData, false);
		new Thread(new BufferThread(fileName, tempBuffer)).start();
	}


Code:
// so sieht die Signatur der JNI-Methode aus:

private native int buffer(String fileName, int sampleSize, int[] tempBuffer, int[] resultBuffer, boolean verbose);

Weiß jemand, was ich machen kann? Mir ist klar, daß native Aufrufe und Threads leicht zu Problemen führen können, aber hier sehe ich wirklich keinen Grund dazu, zumal ich ja alle Objekte immer neu erstelle und aus dem Array gar nicht lesen muß, um das Programm zum Absturz zu bringen.
 

Yzebär

Bekanntes Mitglied
Bist du denn sicher, daß der erste Thread bereits beendet ist, wenn der zweite Thread gestartet wird? Ich nehme an, daß die native Funktion nicht threadsafe ist und es daher zu Problemen kommen kann, wenn die gleichen Resourcen angefordert werden (zB die Datei <fileName>). Wäre das vielleicht möglich?
 

Rock Lobster

Bekanntes Mitglied
Ja, da bin ich eigentlich 100% sicher.

In der Tat wird der Thread sogar 2x parallel ausgeführt, und zwar mit der gleichen Datei, und es funktioniert perfekt. Dann ist die Funktion schon längst beendet, und ich sorge per FileDialog (also von Hand) dafür, daß eine neue Datei geöffnet wird, für die ebenfalls wieder der Thread 2x parallel ausgeführt wird. Also eigentlich nichts anderes wie beim ersten mal, nur daß es halt diesmal kracht.

Ein Versuch war aber bereits, den parallelen Thread einfach mal komplett rauszunehmen, sodaß für jede Datei immer nur 1 einziger Thread benutzt wurde. Aber auch hier hat es nicht funktioniert.

Aber wie gesagt - daß der erste Thread abgeschlossen ist, sobald der neue anfängt, weiß ich 100%ig, da ich den zweiten von Hand starte, und zwar erst, wenn ich die Ergebnisse vom ersten Thread sehe.
 

Rock Lobster

Bekanntes Mitglied
Muß gerade noch dazusagen, daß es zwischendurch seltsamerweise funktioniert. Sicherheitshalber hab ich mir nun auch mal die Hashcodes ausgegeben von den Arrays und dem Thread, und sie unterscheiden sich bei jedem Aufruf, sind also verschieden.

Aber wie gesagt, manchmal funktioniert es mehrmals nacheinander, und irgendwann kommt dann der Versuch, wo es abstürzt. Komischerweise war es vorher viel öfters der Fall, also ich konnte den Absturz quasi vorhersagen. Seltsamerweise ist es jetzt öfter der Fall, daß ich "Glück" habe und es nicht abstürzt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
A Thread.sleep Problem Allgemeine Java-Themen 2
Flynn Thread-Problem... Allgemeine Java-Themen 2
K Thread Problem Allgemeine Java-Themen 6
E Threads linkedlist/multi-thread problem Allgemeine Java-Themen 3
vandread Problem bei kleiner Thread-Übung Allgemeine Java-Themen 2
J Problem mit der Thread Programmierung Allgemeine Java-Themen 2
S Thread - Problem Allgemeine Java-Themen 5
D Form mit StatusFeld (Thread problem) -gelöst- Allgemeine Java-Themen 4
G Problem mit Thread! Allgemeine Java-Themen 2
E Java.net und Thread-Problem Allgemeine Java-Themen 2
R Thread-Problem, und synchronized bringt nix Allgemeine Java-Themen 4
S Problem!Thread! Allgemeine Java-Themen 3
M Thread Problem Allgemeine Java-Themen 7
A Problem mit Bildgenerierung in Thread Allgemeine Java-Themen 3
B Problem bei Thread Allgemeine Java-Themen 2
G thread-problem Allgemeine Java-Themen 7
bernd Thread-Problem Allgemeine Java-Themen 9
A Problem mit Thread Allgemeine Java-Themen 2
K Thread-Problem Allgemeine Java-Themen 3
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben