Hallo ich habe ein c++ prog zur verfügung, dass einen Timecode,der sich alle 40ms ändert in der Linux Shell ausgibt. Wie kann ich diesen Wert auf ein Java Programm übertragen? Ich habe schon probiert den wert in eine Datei zu schreiben und ihn von dem Java Prog. wieder auslesen zu lassen. Allerdings entstehen dann Lücken im Timecode, die Schreib - Leseprozesse der Progs. stören sich.
Also nochmal konkret meien Frage: Wie bekomme ich einen Wert von eine mC++ Prog in ein Java Prog???
Dann musst du den C++ Prozess vom Java Programm aus starten (Runtime.getRuntime().exec("Dein Programmname") )und mit dem Rückgabewert ne Process Instanz initialisieren. Jetzt kommst du über die Process Instanz an die Streams des C++ Programms(in,out,err).
Ist IMHO aber nur für wirklich einfache Datentransfers geeignet.
MfG Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
int main() { int i=1; while(i<=10) { Sleep(500); cout<<i<<endl; ++i; } return0; }
Und der Java Code:
C++:
import java.io.*;
class CPPOut { publicstaticvoid main(String[] args) { Process proc; boolean notDone =true; String valueOfCppI; try { proc = Runtime.getRuntime().exec("test.exe"); InputStream is = proc.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); while(notDone) { try { intexit; //exitValue wirft ne Exception wenn der Prozess noch läuft exit=proc.exitValue(); if(exit==0) { notDone=false; System.out.println("Cpp Prozess wurde mit ExitCode "+exit+" beendet.");
} } catch(IllegalThreadStateException e) { if((valueOfCppI = br.readLine())!=null) { int valueOfJavaI=0; valueOfJavaI = new Integer(valueOfCppI).intValue(); System.out.println("Wert von I im Java Programm :"+valueOfJavaI); } } }//while }//try catch(IOException e) { System.out.println(e.toString()); }
} //main }
Geht bestimmt auch schöner aber funktioniert.
MfG Spacelord
PS: Die Formatierung ist so bescheiden weil ich kein Bock hatte Eclipse zu starten (766Mhz Rechner ) und mit Context wird es nie so dolle... -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.Dieser Post wurde am 15.06.2005 um 15:42 Uhr von Spacelord editiert.
Danke deine Variante funzt. Auch wenn der Timecode nicht auf die Millisecunde genau gelesen wird. Sprich ich bekomme Sprünge von 9 Frames.
Das ist klar das Ganze ist ja in keinerlei Weise synchronisiert.Das Java Programm schaut ja eigentlich nur ständig nach ob im Buffer was steht und durchläuft dann wieder die komplette while Schleife.Aus Performancesicht ist das absoluter Schrott. Ich denke auch auch dass,wenn du die ms noch weiter runterschraubst,das C++ Programm dem Java Programm "wegläuft".Sprich das C++ Programm produziert mehr Output als das Java Programm abholen kann.Kein Ahnung was genau dann passiert......aber wohl nichts gutes .
MfG Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.