Runtime.exec不';编译java文件

Runtime.exec不';编译java文件,java,compilation,runtime.exec,Java,Compilation,Runtime.exec,我通过Runtime.exec(“javacmyfrog.java”)编译java文件; 它说没有错误,不输出任何内容,但不创建MyFrog.class文件。 如果我写Runtime.exec(“javac”),它会输出一些帮助文本。 所以我知道程序正在运行,但不要创建类文件。权限正常。确保工作目录中存在MyFrog.java尝试javac-verbose并确保类路径设置正确。您可以使用ProcessBuilder或Runtime.exec()方法创建新进程 String []cmd={"jav

我通过Runtime.exec(“javacmyfrog.java”)编译java文件; 它说没有错误,不输出任何内容,但不创建MyFrog.class文件。 如果我写Runtime.exec(“javac”),它会输出一些帮助文本。
所以我知道程序正在运行,但不要创建类文件。权限正常。

确保工作目录中存在
MyFrog.java

尝试
javac-verbose
并确保类路径设置正确。

您可以使用ProcessBuilder或Runtime.exec()方法创建新进程

String []cmd={"javac","Foo.java"};

Process proc=Runtime.getRuntime().exec(cmd);
proc.waitFor();
或者使用ProcessBuilder

ProcessBuilder pb =  new ProcessBuilder("javac.exe","-verbose", "Foo.java");

pb.redirectErrorStream(true);
Process p = pb.start();
p.waitFor();

InputStream inp=p.getInputStream();
int no=inp.read();
while(no!=-1)
{
 System.out.print((char)no);
 no=inp.read();
} 

javac-verbose
应该为您提供更多信息,特别是创建文件的目录。因为您能够在没有任何参数的情况下识别输出帮助文本,所以我假设您正在捕获进程的stderr,并且假设您也在对stdout执行相同的操作(尽管javac似乎没有向stdout写入任何内容)


您在哪里检查.class文件的存在?它是在与.java文件相同的目录中创建的。如果MyFrog.java有包声明,则不会在包子目录中创建它;为此,必须使用
-d
参数

我总能找到关于Java exec的所有问题的答案

您是否尝试过
javac-verbose
?不带参数的javac和javac.java都会打印到stderr。如果他能够看到一个错误输出,他应该能够看到另一个错误输出?我在评论中写道-verbose,如果类路径不好,他将得到错误输出。为什么?是否需要更改环境以调用javac?@HemalPandya-抱歉!这是我的错误。我仍然不知道这些如何解决这个问题,因为他能够看到来自
javac
@HemalPandya的输出-Runtime.exec的标准输出不会自动重定向到调用方的标准输出。必须设置System.setOut()方法的流。您的意思是标准错误没有重定向到标准输出?是的,但如果他使用的是ProcessBuilder,则是这样。他没有使用它,他使用的是Runtime.exec,在这里它们必须单独读取。既然OP看到了错误信息,他一定是做对了。无论如何,我想我们永远都不会知道,@ardakshalkar对这个问题的兴趣似乎比你和我小得多。run:0[parsing started MyFrog.java][parsing completed 19ms][search path for source files:。][search path for class files:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/resources.jar,……它继续显示类文件。][total 171ms]这意味着它仍在创建
.class
文件。您需要等待它完成。使用
Process.waitFor()
。顺便说一句,您是否在循环中读取流程输出和错误?您需要。我确实在等待。我读取了错误流和输出流。如果我指定了错误的文件名,它会给我错误的文件名,它将很快完成。如果
waitFor
返回,并且您已经打印了
系统上的所有内容。err
则它会有创建的类文件的位置或一些错误消息。发布您的代码,在命令行上运行并发布输出。我意识到这是NetBeans的问题。我在简单的文件中实现了它,并且成功了。