2016-07-15 11 views
-1

läuft ich einen Befehl in Termninal (Ubuntu) mit Java-ProgrammBefehl ausgeführt wird, nicht bei der Verwendung von Java

nach dem Surfen im Internet ausführen möchten fand ich Ausweg Befehle auszuführen java

Im Anschluss an die Code LDD-Version in ubuntu

String[] command = { "ldd", "--version" }; 
      ProcessBuilder probuilder = new ProcessBuilder(command); 
      Process process = probuilder.start(); 
      InputStream is = process.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is); 
      BufferedReader br = new BufferedReader(isr); 
      String line; 
      process.waitFor(); 

      // System.out.println(br.readLine()); 
      while ((line = br.readLine()) != null) { 
       System.out.println(line); 
      } 

in dem obigen Code zu finden i versuchen, um herauszufinden, "ldd verison" mit Java in ubuntu. das hat gut funktioniert, ich habe die ldd version.

Aber als ich versuchte, Java-Version meines Ubuntu auf die gleiche Weise zu finden. Der Code gibt nichts zurück, da br.readline null ist. Ich war abel, um herauszufinden, ldd vesion, Warum nicht Java-Version?

Es folgt der Code Java-Version in Ubuntu java

String[] command = { "java", "-version" }; 

    ProcessBuilder probuilder = new ProcessBuilder(command); 
    Process process = probuilder.start(); 

    InputStream is = process.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(isr); 
    String line; 
    process.waitFor(); 

    // System.out.println(br.readLine()); 
    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
    } 

Irgend jemand bitte mich, um herauszufinden, helfen mit, um herauszufinden, wie Java-Version mit Java-Code in Ubuntu zu finden.

+0

Lesen Sie den Fehlerstrom, um herauszufinden, was passiert ist. Vielleicht ist Java nicht in PATH. – Jens

+0

Versuchen Sie, 'process.getErrorStream()' auf die gleiche Weise wie inputstream zu drucken. Wahrscheinlich erhalten Sie eine Fehlermeldung in diesem Stream. – Codebender

+1

Die einzige Erklärung, die ich heraufbeschwören kann, ist, dass 'java' nicht auf Ihrer 'PATH'-Variable ist. Wenn ja, wenn Ihr Java-Code 'java -version' ausgeführt hat, ist er tatsächlich fehlerhaft. –

Antwort

2

Leider wurde so Java implementiert. Es scheint, dass die Java -version Option durch die stderr statt der üblichen stdout

Referenz gedruckt wird: Why does 'java -version' go to stderr?

Dieses Phänomen erklärt, warum Ihre subprocess den Befehl lief aber scheint alles durch den Stderr Kanal gedruckt wird es scheint So wie Sie es nicht scheiterten, den Befehl auszuführen, aber wenn Sie den Fehlerstrom über process.getErrorStream() ausgeben, sehen Sie stattdessen den Versionstext.

Sie sollten in der Lage sein, die Java-Versionsnummer über die Systemeigenschaft 'java.version' zu erhalten.

Beispiel:

System.out.println(System.getProperty("java.version"));

Ausgang:

1.8.0_51

Sie könnten in den anderen Java bezogenen Eigenschaften interessiert sein, dass Sie drucken können - wie Laufzeit und Produkterstellungsversion usw.

See: http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html

Verwandte Themen