2015-09-28 2 views
0

Я изначально написал программу с именем «Command.java», которая компилирует другую программу с именем «New.java», которая, в свою очередь, печатает мир привет на консоль. Но после выполнение Command.java, я обнаружил, что он успешно скомпилирован "New.java", но не печатать "Привет мир" в console.Here являются коды: -Выполните программу, которая печатает «hello world» из другой программы в java

class New 
{ 
    public static void main(String[]args) 
    { 
     System.out.println("Hello World"); 
    } 

}

import java.io.*; 
class Command 
{ 
    public static void main(String[]args)throws IOException 
    { 


     Runtime r=Runtime.getRuntime(); 
     try 
     { 


      Process p=r.exec("cmd pushd C:\\Users\\Admin\\Desktop"); 

      p=r.exec("\"E:\\jdk1.7.0_11\\bin\\javac.exe\" New.java"); 
      p.waitFor(); 
      p=r.exec("\"E:\\jdk1.7.0_11\\bin\\java.exe\" New"); 
      p.waitFor(); 

    } 
    catch(Exception e) 
    { 
     System.out.println(e.getMessage()); 
    } 
} 

}

Но после внесения некоторых изменений в Command.java он работал ..... и вот новый код Command.java: -

import java.io.*; 
class Command 
{ 
    public static void main(String[]args)throws IOException 
    { 


     Runtime r=Runtime.getRuntime(); 
     try 
     { 


      Process p=r.exec("cmd pushd C:\\Users\\Admin\\Desktop"); 

      p=r.exec("\"E:\\jdk1.7.0_11\\bin\\javac.exe\" New.java"); 
      p.waitFor(); 
      p=r.exec("\"E:\\jdk1.7.0_11\\bin\\java.exe\" New"); 
      p.waitFor(); 
      InputStream in= p.getInputStream(); 
      BufferedReader br=new BufferedReader(new InputStreamReader(in)); 
      System.out.println(br.readLine()); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e.getMessage()); 
    } 
} 

}

Теперь мой вопрос, почему моя предыдущая Программа Command.java не печатала Hello world, но моя вторая версия работала.

ответ

0

Каждый Java приложение запускается в собственной консоли. Консоль, которую вы видите при запуске вашей программы, принадлежит Command.java. Это означает, что будет отображаться только вывод из Command.java и ничего другого. New.java работает в другой консоли, которая в этом случае вам не показана. Вторая версия Command.java считывает вывод из New.java, а затем печатает его на своей собственной консоли.

0

Вы должны прочитать вывод команды системы из вашего Java program.So, первая программа, которую написал не показал вам вторая программа output.Your работала нормально, так как вы читать вывод

+0

Но New.java содержит инструкцию System.out.println(), поэтому он должен печатать «Hello world» непосредственно в окне консоли. Окно командной строки i.e – Gunjan

+0

По умолчанию созданный подпроцесс не имеет собственного терминала или консоли. Все его стандартные операции ввода-вывода (т. Е. Stdin, stdout, stderr) будут перенаправлены на родительский процесс, где к ним можно получить доступ через потоки, полученные с помощью методов getOutputStream(), getInputStream() и getErrorStream(). обратитесь [link] (http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html) – Jaipal

 Смежные вопросы

  • Нет связанных вопросов^_^