2016-07-03 3 views
0

Я работаю над простой java-программой, которая запускает другую программу Java, которая находится в любом месте в файловой системе. Вот код: -Запуск java-программы, расположенной в любом месте из другой Java-программы

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

class CompileTest { 
    public static void main(String args[]) { 
     try { 
       int k = runProcess("javac H://Study//eclipse_workspace//advance//src//Hello.java"); 
       if (k==0) 
       k=runProcess("java H://Study//eclipse_workspace//advance//src//Hello"); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
    } 

    private static int runProcess(String command) throws Exception { 
     Process pro = Runtime.getRuntime().exec(command); 
     printLines(command + " stdout:", pro.getInputStream()); 
     printLines(command + " stderr:", pro.getErrorStream()); 
     pro.waitFor(); 
     //System.out.println(command + " exitValue() " + pro.exitValue()); 
     return pro.exitValue(); 
    } 

    private static void printLines(String name, InputStream ins) throws Exception { 
     String line = null; 
     BufferedReader in = new BufferedReader(new InputStreamReader(ins)); 
     while ((line = in.readLine()) != null) { 
      System.out.println(name + " " + line); 
     } 
    } 
} 

Вот Hello.java

class Hello { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     System.out.println("Hello"); 
    } 

} 

Но когда компилировать это даст выход, как: -

java H://Study//eclipse_workspace//advance//src//Hello stderr: Error: Could not find or load main class H:..Study..eclipse_workspace..advance..src..Hello 

Я использую Eclipse IDE

+0

Смотрите также [Когда Runtime.exec() не будет] (http://www.javaworld.com/article/2071275/core-java /when-runtime-exec---won-t.html) для многих хороших советов по правильному созданию и обработке процесса. Затем проигнорируйте это, ссылаясь на 'exec' и используйте' ProcessBuilder' для создания процесса. Также разбивайте 'String arg' на' String [] args', поскольку это даст такие преимущества, как корреляция, учитывающая пути с пробелами в них. –

+0

Как в сторону, учитывая то, что пытается достичь код, см. Также ['JavaCompiler'] (http://docs.oracle.com/javase/8/docs/api/javax/tools/JavaCompiler. html), который является * «Интерфейсом для вызова компиляторов языка программирования Java ™ из программ» *. Затем создайте 'URLClassLoader' для загрузки полученного класса из локальной файловой системы и вызовите метод' main (String []) 'напрямую. Это обеспечивает не только более простое программирование, но и лучшую обратную связь от фаз компиляции или выполнения. –

ответ

0

Попробуйте что-нибудь вроде: java -classpath . Hello. Если вы не указали пакет, вы должны запустить Hello.class из того же каталога.

runProcess(cd H:/Study/eclipse_workspace/advance/src/)

А потом

runProcess(java Hello)

+0

Hello.java и CompilerTest.java находится в том же каталоге @LeonidLunin –

+0

@AbhishekThakur пытается cd в этом каталоге перед запуском java Привет –

+0

нет его не работает 'java.io.IOException: не удается запустить программу «cd»: ошибка CreateProcess = 2, система не может найти указанный файл \t в java.lang.ProcessBuilder.start (Unknown Source)» Вызванный: java.io.IOException: ошибка CreateProcess = 2, система не может найти указанный файл \t в java.lang.ProcessImpl.create (собственный метод) Эти Исключения идут @LeonidLunin –

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

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