Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern

noobee

Aktives Mitglied
Hallo,

ich starte mit Netbeans (unter Linux) mittels
Java:
Process p = Runtime.getRuntime().exec("java -jar test_cli.jar);
ein testtool. Wenn ich dies händishc im Terminal starte, läuft dieses ein paar sec und gibt mir dann im Terminal ein Ergebnis zurück. Jetzt weiß ich nicht, wie ich diese Rückgabe nach "unbestimmter" Zeit aus dem Terminal mit Netbeans abfragen kann.
Bei
Java:
p.waitFor();
und
Java:
System.out.println(p.toString());
bekomme ich sofort nur Quark zurück. Eigentlich wollte ich ja mit
Java:
p.waitFor();
auf das Ende des Prozesses warten und erst dann den Wert aus dem Terminal irgendwie holen. Warum funktioniert hier p.waitFor() nicht o_O ?
 

mihe7

Top Contributor
Java:
import java.io.InputStream;

public class Test {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec("java -cp . Cli");
        try(InputStream is = p.getInputStream()) {
            StringBuilder b = new StringBuilder();
            int c;
            while ((c = is.read()) != -1) {
                b.append((char) c);
            }
            System.out.println(b.toString());
        }
    }
}
 

noobee

Aktives Mitglied
Danke.
Gleich mal probiert. Ich dachte eigentlich, dass Netbeans das mit dem ClassPath macht :eek: Ok, ClassPath rausgesucht und weiter ;)
Wenn ich nun
Java:
java -cp /usr/lib/jvm/java-11-openjdk-amd64/ . test_cli.jar
ausführe gibt es zwei Fehler:
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

btw ist bei meinem fehlerhaften Code natürlich auch "is.read" gleich -1, somit gehts auch nie in die whlie :(
 

mihe7

Top Contributor
Nein, Du brauchst schon Deinen java-Aufruf (mit -jar), wenn Du ein Jar mit einem Manifest hast, das die Main-Klasse angibt. Tut mir leid, wenn ich Dich hier etwas verwirrt habe :)

Die Alternative bestünde darin, den Classpath anzugeben, dann müsste die Jar in den Classpath mit rein und die Main-Klasse explizit angegeben werden (z. B. java -cp test-cli.jar paket.zur.Main).
 

dzim

Top Contributor
Den Pfad der Runtime als Classpath anzugeben ist unnötig. Was soll der einsame Punkt bewirken?, wenn es in den Classpath soll: Doppelpunkt und kein Leerzeichen rein, wenn du explizit dort noch *andere* Jars inkludieren musst. Ansonsten lautet der Befehl
java [-cp <path-or-jar1>[:<path-or-jar2[:...]]] -jar <your-executable.jar>
 
Zuletzt bearbeitet:

noobee

Aktives Mitglied
Öhm, ja. Ich bin dann mal raus o_O Also jetzt bin ich doch ein wenig verwirrt. Brauch ich nun den Classpath doch nicht? In der Konsole funktioniert es ja, wenn ich es eingebe. Wenn ich aber genau den gleichen Code über Netbeans ablaufen lsase, passiert nix...

Sollte das so aussehen in Netbeans?
Java:
java -cp /usr/lib/jvm/java-11-openjdk-amd64/ -jar test_cli.jar

EDIT: In der Konsole gehts mal wieder, mit Netbeans nicht :(
 

noobee

Aktives Mitglied
Hallo,
tja, es gibt keinen sichtbaren Fehler. Netbeans läuft durch.
Ich sehe es nur daran, dass "is.read()" gleich "-1" ist, somit "try(InputStream is = p.getInputStream()){" nicht funktioniert hat, bzw. "Process p = Runtime.getRuntime().exec" nicht geklappt hat.
 
X

Xyz1

Gast
Ich meine mich daran erinnern zu können, dass beide Streams geöffnet werden müssen. Es kann aber auch falsch sein.
 

mihe7

Top Contributor
Damit wir hier vom gleichen reden: die Testanwendung sieht so aus:
Java:
public class Test {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec("java -jar test_cli.jar");
        try(InputStream is = p.getInputStream()) {
            StringBuilder b = new StringBuilder();
            int c;
            while ((c = is.read()) != -1) {
                b.append((char) c);
            }
            System.out.println(b.toString());
        }
    }
}
?

Dann gibt mal noch den Pfad zur test_cli.jar explizit an und wenn das immer noch nicht funktioniert auch den Pfad zu "java".
 

mihe7

Top Contributor
Das verstehe ich - ich würde mir auch nicht trauen. Also, extra für Dich:
Java:
public class Cli {
    public static void main(String[] args) throws Exception {
        Thread.sleep(2000);
        System.out.println("Die Antwortet lautet: " + ((int)(Math.random()*Integer.MAX_VALUE)));
    }
}

Code:
Main-Class: Cli
Java:
import java.io.InputStream;

public class Test {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec("java -jar cli.jar");
        try(InputStream is = p.getInputStream()) {
            StringBuilder b = new StringBuilder();
            int c;
            while ((c = is.read()) != -1) {
                b.append((char) c);
            }
            System.out.println(b.toString());
        }
    }
}

Code:
javac *.java
jar -cfm cli.jar Manifest.txt Cli.class
java -cp . Test
Hoffe, nichts vergessen zu haben :p
 

noobee

Aktives Mitglied
Dann gibt mal noch den Pfad zur test_cli.jar explizit an und wenn das immer noch nicht funktioniert auch den Pfad zu "java".

:eek::eek::eek::eek: Ich dreh durch. Genau das war der Fehler - so was simples. Die Pfadangabe muss explizit sein :confused: Da hätte ich im Leben nicht dran gedacht :(

DANKE :):) es läuft !!! :):) und SORRY wegen dem "Wind für (fast) nichts"
 
X

Xyz1

Gast
Versuch zur Schlichtung
siehe Test1.zip und doppelklicken auf die beiliegende BAT.

Bei mir sind nur seltsamerweise Zeilenumbrüche nicht sichtbar!
 

Anhänge

  • Test1.zip
    2,2 KB · Aufrufe: 1
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Rückgabe eines Values in umgekehrte richtung Java Basics - Anfänger-Themen 5
M Rückgabe eines Arrays Java Basics - Anfänger-Themen 10
J Funktionen auf der Rückgabe eines Stacks (pop) Java Basics - Anfänger-Themen 6
karlmasutra Klassen Rückgabe eines Wertes aus einer anderen Klasse Java Basics - Anfänger-Themen 3
L Probleme bei Rückgabe eines Arrays in einer Methode Java Basics - Anfänger-Themen 47
S Rückgabe eines eingelesenen 2D Arrays aus Klasse heraus Java Basics - Anfänger-Themen 3
F Rückgabe eines Array´s aus einer Methode Java Basics - Anfänger-Themen 3
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
R Methode Rückgabe Java Basics - Anfänger-Themen 10
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
J Rückgabe-Problem Java Basics - Anfänger-Themen 10
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
V Methoden Rekursive Methode mit String als Rückgabe Java Basics - Anfänger-Themen 7
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
F Konsolen Befehl ausführen und Rückgabe auswerten Java Basics - Anfänger-Themen 3
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
L Frage zur Rückgabe von Werten bei Methoden Java Basics - Anfänger-Themen 4
P Rückgabe erflogt nicht als Double Java Basics - Anfänger-Themen 2
D Methoden ArrayList Rückgabe bringt komische Werte Java Basics - Anfänger-Themen 12
M Übergabe / Rückgabe Java Basics - Anfänger-Themen 6
A Rückgabe in for-Schleife Java Basics - Anfänger-Themen 2
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
G Methoden mehrdimonsionale Arrays als Rückgabe Java Basics - Anfänger-Themen 2
S Methode rückgabe wiederverwenden Java Basics - Anfänger-Themen 4
J Rückgabe als Wert, keine Referenz Java Basics - Anfänger-Themen 3
llabusch Methoden Rückgabe einer Methode verwerden Java Basics - Anfänger-Themen 1
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
R public static void Rückgabe Java Basics - Anfänger-Themen 5
H Array wird verändert ohne Rückgabe? Java Basics - Anfänger-Themen 7
S Rückgabe von einem Array Java Basics - Anfänger-Themen 7
S Problem mit Rückgabe Wert von Methoden Java Basics - Anfänger-Themen 5
M Serialize - Fehler bei Rückgabe von Objekt Java Basics - Anfänger-Themen 5
R CMD Rückgabe durchlesen Java Basics - Anfänger-Themen 14
W Rückgabe Methode mit Feld Java Basics - Anfänger-Themen 4
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
N Rückgabe der Werte funktioniert nicht Java Basics - Anfänger-Themen 9
F Problem bei Rückgabe von StringBuffer aus Methode Java Basics - Anfänger-Themen 6
N HashMap fehlerhafte Rückgabe Java Basics - Anfänger-Themen 7
K Problem mit der Rückgabe Java Basics - Anfänger-Themen 3
R Rückgabe Array Java Basics - Anfänger-Themen 22
G Klasse überschreiben wenn Rückgabe über Methode Java Basics - Anfänger-Themen 6
M Methode mit Rückgabe Java Basics - Anfänger-Themen 2
D Maximum Subarray Problem; Problem mit der Rückgabe Java Basics - Anfänger-Themen 10
N Methoden und deren Rückgabe Java Basics - Anfänger-Themen 4
D Rückgabe einer Klasse Java Basics - Anfänger-Themen 20
H TreeMap Rückgabe - Compiler-Warnings Java Basics - Anfänger-Themen 9
M Rückgabe bei Exception Java Basics - Anfänger-Themen 4
H Rekursion und Rückgabe Java Basics - Anfänger-Themen 11
K Rückgabe aus Formular Java Basics - Anfänger-Themen 3
S HashMap: Rückgabe des key zu bestimmten value Java Basics - Anfänger-Themen 3
B "vollständige" Resultat Rückgabe Java Basics - Anfänger-Themen 8
G Problem mit der Rückgabe von einem Array Java Basics - Anfänger-Themen 3
A Beschreibung von Code und Rückgabe von Anzahl in ArrayList Java Basics - Anfänger-Themen 5
C Parameter rückgabe nach Prüfung an Klasse/Methode Java Basics - Anfänger-Themen 2
R Rückgabe vom ActionListener Java Basics - Anfänger-Themen 12
B JavaFilter true rückgabe Java Basics - Anfänger-Themen 23
J datentyp -objectTyp Rückgabe Java Basics - Anfänger-Themen 2
zilti PHP-Script aufrufen und Rückgabe lesen Java Basics - Anfänger-Themen 2
G Array Rückgabe aus Programm Java Basics - Anfänger-Themen 6
0 Probleme bei Threads mit Rückgabe. Java Basics - Anfänger-Themen 6
C Rückgabe bei methoden Java Basics - Anfänger-Themen 2
S Probleme mit InputStream- Rückgabe Java Basics - Anfänger-Themen 4
G Warum ist die Rückgabe kein Integer? Java Basics - Anfänger-Themen 5
G Rückgabe Java Basics - Anfänger-Themen 6
G Rückgabe mehrdimensionales Array Java Basics - Anfänger-Themen 3
G Rückgabe einer Kopie bzw. Referenz Java Basics - Anfänger-Themen 22
G Rückgabe einer Methoden bei Schließen des Fensters Java Basics - Anfänger-Themen 3
M Rückgabe funktioniert nicht! Java Basics - Anfänger-Themen 4
M Rückgabe oder Parameter? Java Basics - Anfänger-Themen 5
H Konstruktor mit Rückgabe Java Basics - Anfänger-Themen 13
L Rückgabe Java Basics - Anfänger-Themen 4
D Rückgabe von Arrays Java Basics - Anfänger-Themen 6
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
walid Öffnungszeiten eines Geschäftes Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
Sachinbhatt Was ist die Notwendigkeit eines Sammlungsframeworks in Java? Java Basics - Anfänger-Themen 2
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben