Я работаю над простой 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
Смотрите также [Когда Runtime.exec() не будет] (http://www.javaworld.com/article/2071275/core-java /when-runtime-exec---won-t.html) для многих хороших советов по правильному созданию и обработке процесса. Затем проигнорируйте это, ссылаясь на 'exec' и используйте' ProcessBuilder' для создания процесса. Также разбивайте 'String arg' на' String [] args', поскольку это даст такие преимущества, как корреляция, учитывающая пути с пробелами в них. –
Как в сторону, учитывая то, что пытается достичь код, см. Также ['JavaCompiler'] (http://docs.oracle.com/javase/8/docs/api/javax/tools/JavaCompiler. html), который является * «Интерфейсом для вызова компиляторов языка программирования Java ™ из программ» *. Затем создайте 'URLClassLoader' для загрузки полученного класса из локальной файловой системы и вызовите метод' main (String []) 'напрямую. Это обеспечивает не только более простое программирование, но и лучшую обратную связь от фаз компиляции или выполнения. –