Input bekommt und output aus einer jar-Datei ausführen von java-Klasse?
Ich habe eine jar-Datei, in der dieser code ausgeführt wird:
public class InputOutput {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
boolean cont = true;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (cont) {
System.out.print("Input something: ");
String temp = in.readLine();
if (temp.equals("end")) {
cont = false;
System.out.println("Terminated.");
}
else
System.out.println(temp);
}
}
}
Möchte ich das Programm ein anderes java-Klasse, die ausgeführt wird, diese jar-Datei und können das Eingangs-und send-Ausgang. Ist es möglich? Der aktuelle code, den ich habe, ist dieses aber es funktioniert nicht:
public class JarTest {
/**
* Test input and output of jar files
* @author Jack
*/
public static void main(String[] args) {
try {
Process io = Runtime.getRuntime().exec("java -jar InputOutput.jar");
BufferedReader in = new BufferedReader(new InputStreamReader(io.getInputStream()));
OutputStreamWriter out = new OutputStreamWriter(io.getOutputStream());
boolean cont = true;
BufferedReader consolein = new BufferedReader(new InputStreamReader(System.in));
while (cont) {
String temp = consolein.readLine();
out.write(temp);
System.out.println(in.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Vielen Dank für Ihre Hilfe
Welcher Teil funktioniert nicht? Welche Plattform verwenden Sie?
Ich bin mit Linux. Ich brauchen, um diese jar-Datei in einem separaten Prozess, weil für das eigentliche Programm, ich bin mit jemand anderes Glas, dass ich nicht den source-code. Dieses Programm gibt den text wenn bei einer bestimmten Eingabe. Das ist, warum ich erstellt habe IntputOutput, Spiegel, Glas Verhalten.
Ich fügte hinzu, io.waitFor() direkt nach Prozess io = Runtime.getRuntime().exec("java-jar InputOutput.jar"); und ich habe gefunden, dass das Programm nur beendet wird, nach dem ausführen der jar-Datei. Warum tut Sie das?
Ich bin mit Linux. Ich brauchen, um diese jar-Datei in einem separaten Prozess, weil für das eigentliche Programm, ich bin mit jemand anderes Glas, dass ich nicht den source-code. Dieses Programm gibt den text wenn bei einer bestimmten Eingabe. Das ist, warum ich erstellt habe IntputOutput, Spiegel, Glas Verhalten.
Ich fügte hinzu, io.waitFor() direkt nach Prozess io = Runtime.getRuntime().exec("java-jar InputOutput.jar"); und ich habe gefunden, dass das Programm nur beendet wird, nach dem ausführen der jar-Datei. Warum tut Sie das?
InformationsquelleAutor Jack L. | 2009-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit Laufzeit.exec ist Plattform abhängig.
Wenn Sie unter windows versuchen voranstellen:
zu
Etwas wie:
Siehe auch dieses: Machen system call und return stdout ausgegeben.
InformationsquelleAutor OscarRyz
Brauchst du, um die jar-Datei in einem anderen Prozess?
Wenn nicht, schreiben Sie ein Java-Programm aufruft, die InputOutput.main(). Alternativ, wenn der name der jar-Datei/Klasse ist nur bekannt, zur Laufzeit, Sie können erstellen Sie ein neues class-loader, laden Sie das gesagt Klasse und rufen Sie die main() per reflection.
Als für die Umleitung der Eingabe - /Ausgabe-streams, die Sie verwenden können, System.darlegen, setIn, setErr.
InformationsquelleAutor Itay Maman
Siehe auch Ausführen von Java-Programmen aus unserem Java-Programm
InformationsquelleAutor PhiLho
Nun, dass Sie sagte, dass Sie es brauchen, um in einem anderen Prozess, hier ist das problem mit deinem ursprünglichen code: Sie haben ein deadlock.
den Prozeß, den Sie starten, läuft an und füllt schnell die Ausgabe und Fehler-streams.
JarTest muss regelmäßig Lesen Ihre Inhalte. Da tun Sie es in einem einzigen thread früher oder später in diesem thread finden sich warten, für die Daten verfügbar sind, auf einem die Bäche. An diesem Punkt gibt es niemand, um Daten zu sammeln aus dem anderen stream.
Daher sollten Sie Start dedizierte threads zum sammeln von Daten von der standard-streams des anderen Prozesses.
InformationsquelleAutor Itay Maman
Alle Informationen, die Sie benötigen, über die Prozess-Eingabe - /Ausgabe-threading enthalten sind hier:
link
InformationsquelleAutor Chris