ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
745
745
EMPFEHLEN
-
Sehr geehrte Tutorials-Gemeinde,
ich bitte höflichst um Ideen
Ich besitze ein DOS-Programm, das spezielle Berechnungen (es geht grob gesagt um Wärmeaustauschberechnungen) durchführt. Dieses Programm möchte ich nun mit meinem Java-Programm nutzen, habe aber noch keine umfassende Idee, wie das möglich ist. Das DOS-Programm ist quasi 'stand-alone' - es gibt keinerlei Schnittstellen o.ä..
Meines Erachtens gibt es drei Schritte:
1. Der Programmstart
dürfte relativ unkompliziert funktionieren.
2. Die Eingabe der Parameter
könnte ich aus dem Java-Programm z.B. per Tastatureingabe an den Prozess senden. Ich habe aber leider noch nichts zu dieser Thematik gefunden. Wer weiß Rat?
3. Die Ausgabe
im DOS-Programm ist eine reine Bildschirmausgabe. Die Position der Lösungen ist immer die gleiche (z.B. Austrittstemperatur steht in der 5. Zeile, ab dem 30. Zeichen).
Gibt es eine Möglichkeit, diese Werte in mein Java-Programm zu übernehmen?
Ich danke für euere Ideen,
Alex
PS Zur Hintergrundinformation: Das Java-Progi soll eine 1D-FEM-Berechnung nebst Optimierungsalgorithmen, Pre- und Postprocessing liefern, allerdings halt ohne die eigentlichen Berechnungen (Processing) zu implementieren.
-
Mit dem ProcessBuilder kannst du dein Programm starten und einen Process erstellen. Von dem Prozess kannst du sowohl Input- als auch Outputstream bekommen und darauf schreiben/davon lesen.
-
Ich werde wohl dann mal dort einsteigen. Vielen Dank!
-
Huhu
Das das zu startende Programm ein Konsolenprogramm ist musst du unbedingt den Standard IO und ERR stream auslesen, da der Output des Programms in ne Pipe gestopft wird, und das Konsolenprogramm stehen bleibt, sobald der Puffer voll ist.
Ich habe für dich ein paar Codeschnipsel aus meiner Sammlung die du nutzen kannst.
Hauptklasse:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
package at.co.lipski.bf2matman.logic; import java.io.IOException; /** * Diese Klasse bietet die Möglichkeit eine externe Applikation mit Parametern zu starten.<br> * Der Konsolenoutput wird umgeleitet und ueber System.out. ausgegeben * * @author Filip Lipski */ public class LaunchExe { //Pfad zur executable public static String exePath = "lib/bf2materials.exe"; //Irgendein Parameter private String parameter; //Noch ein Parameter private String parameter2; private Process process; //Die Streamreader private StreamGobbler stdout; private StreamGobbler stderr; public LaunchExe(){ parameter = ""; parameter2 = ""; } public LaunchExe(String parameter1, String parameter2){ this.parameter = parameter1; this.parameter2 = parameter2; } public void startProcess(){ try{ /* * Erstelle neuen ProcessBuilder.<br> * Mehr oder weniger Parameter sind moeglich<p> * * z.B.: new ProcessBuilder("CPlusPlusProgramm.exe","-param","value","-param2","anothervalue"); */ ProcessBuilder pb = new ProcessBuilder(exePath,parameter,parameter2); /* * Startet den Prozess und liefert ein Process objekt<p> * HINWEIS: Die Java VM faehrt erst komplett herunter wenn dieser Prozess beendet wurde * */ process = pb.start(); /* *Erstelle die Streamreader.<br> * Die Standard output und error streams MUESSEN ausgelesen werden wenn die App Konsolenoutput hat<br> * Wird nicht ausgelesen kann dies unter bestimmten Machines (je nach Buffersize) zu freezes fuehren<br> * *boese boese* */ stdout = new StreamGobbler(process.getInputStream()); stderr = new StreamGobbler(process.getErrorStream()); stdout.start(); stderr.start(); } catch(IOException ex){ //Errors handlen. Executable nicht gefunden, bla bla bla ex.printStackTrace(); } } }
Streamreader-klasse:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
package at.co.lipski.bf2matman.logic; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; /** * * @author Filip Lipski */ public class StreamGobbler implements Runnable{ private InputStream is; private Thread thread; private volatile boolean finished = false; public StreamGobbler (InputStream is) { this.is = is; } //Startet den Streamreader in einem neuen Thread public void start () { thread = new Thread (this); thread.start (); } public void run () { try { InputStreamReader isr = new InputStreamReader (is); BufferedReader br = new BufferedReader (isr); while (finished) { String s = br.readLine(); //WEITERVERARBEITEN DES OUTPUTS System.out.println(s); if(s==null){ finished = true; break; } } is.close (); } catch (Exception ex) { System.out.println ("Problem reading stream... :" + ex); ex.printStackTrace (); } } /** * Methode um zu prüfen ob fertig gelesen wurde.<br> * Dies geschieht wenn ein Fehler auftrat oder der uebergebene InputStream ordnungsgemaess geschlossen wurde * * @return true wenn nicht mehr gelesen wird, otherwise false */ public boolean isFinished() { return finished; } /** * Veranlasst das Beenden des Lesens.<br> * Diese Methode ist statt Thread.stop() zu benutzen. * */ public void stopRead() { this.finished = true; } }
Du kannst den Input auch weiterleiten. Das funktioniert ähnlich wie das Auslesen.
Ich wünsch die viel Spaß beim Berechnen von deinen Temperaturen
-
Das ist ja ein Service hier! Vielen Dank!

Es ist zwar gerade ein Auftrag dazwischengekommen, ich werde das aber bald umsetzen! Super! Dankeschön!
Ähnliche Themen
-
Datenbank-Kommunikation im Delphi-Programm
Von HarryXVI im Forum Delphi, Kylix, PascalAntworten: 1Letzter Beitrag: 20.07.10, 00:57 -
Kommunikation mit anderem Programm
Von 3Cyb3r im Forum PHPAntworten: 1Letzter Beitrag: 04.11.08, 09:14 -
Kommunikation PC - PPC
Von Norbert Eder im Forum .NET ArchivAntworten: 1Letzter Beitrag: 04.09.07, 10:10 -
Mouse Filter Treiber Kommunikation mit Programm
Von dondong im Forum C/C++Antworten: 0Letzter Beitrag: 01.04.07, 18:32 -
Netzwerk-Kommunikation via Programm
Von theindra im Forum .NET ArchivAntworten: 4Letzter Beitrag: 13.10.04, 10:51





Zitieren

Login





