【发布时间】:2011-05-06 14:09:03
【问题描述】:
我需要一个java中的java程序,它使用cmd命令编译其他java程序
【问题讨论】:
-
也许你应该只使用 ant(见 ant.apache.org):-)
标签: java
我需要一个java中的java程序,它使用cmd命令编译其他java程序
【问题讨论】:
标签: java
Runtime.exec( -whatever cmd command you need to execute- )
http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html
葡萄酒。
【讨论】:
ProcessBuilder (download.oracle.com/javase/1.5.0/docs/api/java/lang/…)
RunTime,它是小写的T。注意:我不认为exec可以直接运行cmd命令,你需要运行@987654327 @...
也许你正在寻找 Java Runtime.exec() 函数:
exec
public Process exec(String command)
throws IOException
执行指定的字符串命令 在一个单独的过程中。这是一个 方便的方法。调用 exec(command) 的形式表现在 与调用完全相同的方式 执行(命令,空,空)。
【讨论】:
要执行真正的 cmd 命令,您需要使用/c 选项启动cmd.exe,使用Runtime.exec 或ProcessBuilder 之类的
String cmd = "dir > t.txt";
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", cmd);
Process process = builder.start();
process.waitFor();
System.out.println("done");
要启动像calc.exe 这样的可执行文件,您可以直接启动它
ProcessBuilder builder = new ProcessBuilder("calc.exe");
Process process = builder.start();
process.waitFor();
System.out.println("done");
两个代码示例都缺少 IO 和异常处理...
【讨论】:
补充说明:
如果使用 JDK1.6,您现在可以使用 JavaCompiler 以编程方式从另一个 java 程序编译。如果这是您想要实现的目标,您可以从命令行调用您的编译器程序。
【讨论】:
使用 cmd 可以这样完成:
String cmd = "c:\\Programme\\Ghostgum\\gsview\\gsprint.exe"; //what to execute
String prt = "-printer XYZ"; // additional parameters
String dat = "\"" + pfad + "\""; // the file to be passed
ProcessBuilder pb = new ProcessBuilder(cmd, prt, dat);
System.out.println(cmd + " " + prt + " " + dat);
pb.redirectErrorStream(true);
Process ps = pb.start();
ps.waitFor();
【讨论】:
cmd.exe,shell变量根本没有被使用。 2:gsprint.exe 不是 cmd 命令。 3:如果你没有读取标准输出,没有理由调用redirectErrorStream(反正没有错)。
不知道为什么要显式调用 shell 来编译 Java 程序。如果您绝对确定这是您需要做的,那么就去做并遵循其他人的建议。但是,如果您只想从 Java 程序中编译 Java 代码,则可以使用 Java 6.0(及更高版本):
http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html
【讨论】:
我终于得到了答案。 它实际上编译了一个Java程序。 程序如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Dos {
public static void main(String[] args) {
try {
String[] command = new String[4];
command[0] = "cmd";
command[1] = "/C";
command[2] = "C:/Program Files/Java/jdk1.6.0_21/bin/javac";//path of the compiler
command[3] = "d:\\a.java";
Process p = Runtime.getRuntime().exec(command);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
// read the output from the command
String s = null;
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
System.out.println("I am In try");
}
catch (Exception e) {
System.out.println("I am In catch");
}
}
}
【讨论】: