JNI

Status
Nicht offen für weitere Antworten.

Kaladial

Bekanntes Mitglied
moin

ich versuch grad in nem programm das ich schreibe das JNI einzubinden...
aber irgendwie klappt das nicht richtig ...

da ich damit noch nie bzw fast nie gearbeitet hab wollt ich ma fragen ob mir hier wer weiter helfen kann...

also folgendes problem:

Code:
		    try{ 
		    	Runtime rt = Runtime.getRuntime (); 
		    	Process p = rt.exec ("compose/compose.bat"); 
		    //	p.waitFor(); 
		    //	if (p.exitValue() != 0) throw new IOException (""); 
		    }catch (IOException e){ 
		    	System.out.println("Fehler beim Umwandeln aufgetreten!"); 
		    	System.out.println("Fehler: "+e);
		    }
		    //}catch (InterruptedException ie){}

das ist mein code...
es soll die compose.bat ausgeführt werden
(wenn ich die bat per hand ausführe macht sie auch das was sie soll)

also ich hab 2 versionen versucht...
einmal so wie es jetzt ist, da bekomm ich keine fehlermeldung aber es passiert auch nichts ...
und dann mit dem auskomentierten, da bekomm ich aber eine ioexception...

also was mach ich falsch?
ich hatte das JNI schonmal mit dem befehl ipconfig ausprobiert, da hat er funktioniert...

thx für hilfe
mfg Kala
 

lhein

Top Contributor
1. hat Dein Problem mal nichts mit JNI zu tun
2. "und dann mit dem auskomentierten, da bekomm ich aber eine ioexception..." ...das liegt einfach daran, daß p.exitValue() eine Exception liefert, wenn der Process noch läuft.

lr
 

Kaladial

Bekanntes Mitglied
versteh ich nicht ...
wieso passiert dann nix wenn ich das programm ausführe?

also die compose.bat sieht so aus:

Code:
compose.exe aktBild.raw aktBild.bmp

compose.exe ist ein programm welches die datei aktBild.raw in ein BMP umwandelt... das passiert aber nicht... also wenn ich es über das JNI aufrufe ... wenn ich die bat per hand aufrufe geht es aber...

also was is da nun falsch dran?

edit:
ahja, und wenn ich mich richtig erinnere hat ipconfig damals auch keine exception geliefert...
 

lhein

Top Contributor
Kaladial hat gesagt.:
versteh ich nicht ...
wieso passiert dann nix wenn ich das programm ausführe?

also die compose.bat sieht so aus:

Code:
compose.exe aktBild.raw aktBild.bmp

compose.exe ist ein programm welches die datei aktBild.raw in ein BMP umwandelt... das passiert aber nicht... also wenn ich es über das JNI aufrufe ... wenn ich die bat per hand aufrufe geht es aber...

also was is da nun falsch dran?

- Nochmal....das hat NICHTS mit JNI zu tun. Du verwendest hier kein JNI, sondern Runtime.exec().
- Warum gehst Du den Umweg über eine BAT Datei anstatt compose.exe direkt aufzurufen?
- das waitFor() sollte funktionieren und liefert als Result den ExitCode (0 = normal Termination).
- Die Ermittlung des exitValue brauchst Du nur dann machen, wenn waitFor() unterbrochen wird (InterruptedException), bevor der Prozess beendet ist.

Ich würde Dir ans Herz legen, mal die API Doku anzusehen.


java.sun.com/j2se/1.5.0/docs/api/java/lang/Process.html

lr
 

Kaladial

Bekanntes Mitglied
dann erklär mir doch ma was JNI ist wenn nicht java nativ interface also ein interface mit dem man extrene programme aufrufen kann ...

sorry aber ich hatte als ich nach dem ip problem gesucht hab nach jni gesucht und bin auf mehreren seiten auf solchen oder ähnlichen code gestoßen ... wie soll denn sonst jni code aussehn ??

und selbst wenn es kein jni code is wen juckts ? nur zu schreiben das ist kein jni code hilft nicht ... sorry aber wieso nich 5 min zeit nehmen um n bissel zu erklären anstatt nur in capselock seine aussage zu wiederholen ...

und deine erklärung hab ich noch immer nicht verstanden...
du schreibst es dürfte keine ioexception bringen ... wieso net ? und tut es aber ...

edit: ahja und der exitcode ist 1...
 

Kaladial

Bekanntes Mitglied
bring ma n paar deutsche seiten :)

is ja auch egal ... obs jni is oder net...
ich möchte ja nur das die variante die ich da beschrieben hab läuft...
und das tut sie zur zeit net...
 

MiMij

Bekanntes Mitglied
Haettest du den Link mal geoeffnet, wuesstest du das das eine Ergebnis auf Wikipedia fuehrt dort steht

So ermöglicht es JNI beispielsweise, dass ein Java-Programm Funktionen einer Windows-DLL oder einer shared library unter Linux, die in C oder C++ programmiert sind, aufruft.

oder

Um aus Java eine native Methode aufzurufen, muss diese zunächst als „native“ deklariert werden. Zudem muss das Objekt selbst die native Programmbibliothek mit dem Aufruf von „System.loadLibrary("<Name der Bibliothek>")“ laden, bevor die native Methode aufgerufen wird.

Und wenn du dann bei google richtig suchst und net nach JNI sondern Java Bat datei ausfuehren findest du sowas

http://www.tutorials.de/forum/java/269660-exec-und-batchdateien.html
 

Kaladial

Bekanntes Mitglied
jo :) und das das kein jni is naja ... hab ich mich wohl irgendwie letztens als ich das andere gesucht hab vertan bzw wurde es da halt falsch erklärt... dachte halt es sie nen jni ... naja jetzt weis ichs besser :) thx auch den anderen
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben