Heyo Leute,
ich befasse mich derzeitig wieder mit dem Porten meines Programms Universal Android Toolkit von VB zu Java, und mir ist etwas sehr nerviges bei Java aufgefallen: Wenn man in Java einen externen Prozess starten möchte, wird dieser gar nicht beendet, selbst wenn der Prozess an sich schon längst tot ist - Java wartet einfach weiter.
Nun, mein Programm soll via ADB mit dem Android-Gerät kommunizieren, und das geht nun mal über ADB (Ich bin zu faul mir die einzelnen Ports zu merken, und dann Anweisungen via TCP zu senden).
Ich habe das Ganze schon in einem seperaten Thread laufen, damit der Benutzer weiterhin das Programm benutzen kann, jedoch, was nützt es dem Nutzer wenn er am Ende 5000 verschiedene Threads am Laufen hat, die unendlich viele Resourcen unnötig schlucken.
Ich möchte irgendwie erkennen, dass der Prozess beendet ist, damit ich dann mit pr.destroy(); hinterhergehen kann, und das Ding dann ein und für alle Male "still legen" kann.
Ich habe schon mit pr.wait();, pr.waitFor(); und pr.exitVale(); rumprobiert, aber dann fängt er den Output des Programms nicht mehr.
Wie kann ich das am Besten lösen, am liebsten ohne Listener, aber wenn es nicht anders geht, geht es dann nicht anders.
Vielen Dank im Voraus.
EDIT:
Da war mal eie while-Schleife drin, die ich aber rausgenommen habe.
ich befasse mich derzeitig wieder mit dem Porten meines Programms Universal Android Toolkit von VB zu Java, und mir ist etwas sehr nerviges bei Java aufgefallen: Wenn man in Java einen externen Prozess starten möchte, wird dieser gar nicht beendet, selbst wenn der Prozess an sich schon längst tot ist - Java wartet einfach weiter.
Nun, mein Programm soll via ADB mit dem Android-Gerät kommunizieren, und das geht nun mal über ADB (Ich bin zu faul mir die einzelnen Ports zu merken, und dann Anweisungen via TCP zu senden).
Ich habe das Ganze schon in einem seperaten Thread laufen, damit der Benutzer weiterhin das Programm benutzen kann, jedoch, was nützt es dem Nutzer wenn er am Ende 5000 verschiedene Threads am Laufen hat, die unendlich viele Resourcen unnötig schlucken.
Java:
new Thread() {
@Override
public void run() {
try {
// Both jTextFields contain text.
ProcessBuilder process = new ProcessBuilder(adb.toString(), "push " + jTextField1.getText() + " " + jTextField2.getText());
Process pr = process.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line;
line = reader.readLine();
Date now = new Date();
if (!line.equals("")) {
jTextArea1.append("[" + now.toString() + "] " + line);
}
} catch (IOException/* | InterruptedException*/ ex) {
JOptionPane.showMessageDialog(null, "ERROR: Error while processing your request!\n" + ex.toString(), "Error Processing Request!", JOptionPane.ERROR_MESSAGE);
}
}
}.start();
Ich möchte irgendwie erkennen, dass der Prozess beendet ist, damit ich dann mit pr.destroy(); hinterhergehen kann, und das Ding dann ein und für alle Male "still legen" kann.
Ich habe schon mit pr.wait();, pr.waitFor(); und pr.exitVale(); rumprobiert, aber dann fängt er den Output des Programms nicht mehr.
Wie kann ich das am Besten lösen, am liebsten ohne Listener, aber wenn es nicht anders geht, geht es dann nicht anders.
Vielen Dank im Voraus.
EDIT:
Da war mal eie while-Schleife drin, die ich aber rausgenommen habe.
Zuletzt bearbeitet: