如何使用另一个程序编译Java程序?

如何使用另一个程序编译Java程序?,java,process,javac,Java,Process,Javac,我正在做一个项目,通过我的应用程序编译和运行java源代码。 我会解释我在这里的环境。。 Java1.6.0\u35 32位和EclipseIndigo使用操作系统Windows64位 当我使用这个代码时 String command = "javac "+file.getAbsolutePath(); System.out.println(command); Process p = Runtime.getRuntime().exec(command);` 出现此异常..认为错误显示文件不存在

我正在做一个项目,通过我的应用程序编译和运行java源代码。 我会解释我在这里的环境。。
Java1.6.0\u35 32位
EclipseIndigo
使用操作系统
Windows64位

当我使用这个代码时

String command = "javac "+file.getAbsolutePath();
System.out.println(command);
Process p = Runtime.getRuntime().exec(command);`
出现此异常..认为错误显示文件不存在,但我检查了它,它在这里 当我通过编译的命令行执行时,eclipse显示了这个错误

java.io.IOException: Cannot run program "javac": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)`

任何人都可以解决这个问题,我尝试了很多..

您不需要使用命令行,您可以通过编程方式访问
javac

JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
javac.run(null, null, null, arguments);

  • 举个例子

它是可移植的(在其他系统上工作),可以避免路径和命令行出现问题。

您不需要使用命令行,您可以通过编程方式访问
javac

JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
javac.run(null, null, null, arguments);

  • 举个例子

它是可移植的(在其他系统上工作),可以避免路径和命令行问题。

您可以使用。也可能有用。

您可以使用。也可能有用。

您的问题似乎不是没有找到要编译的文件,而是没有找到javac命令本身。通过将“PATH=/PATH/to/java/dir”传递给exec,确保运行时能够找到javac可执行文件


请参阅:

您的问题似乎不是没有找到要编译的文件,而是没有找到javac命令本身。通过将“PATH=/PATH/to/java/dir”传递给exec,确保运行时能够找到javac可执行文件


请参阅:

这意味着编译器
javac
不在您的路径中。我会尝试使用javac.u hum no way bro的完整路径名,我已经尝试过了,我可以通过命令行编译java源代码:(那么,当你尝试完整路径名时,它仍然失败?你能澄清完整路径名代表什么吗?`C:\Users\user>javac D:\Project\ServerCodeB\WebContent\Programs\Hello.java C:\Users\user>`这意味着编译器
javac
不在你的路径中。我会尝试使用javac的完整路径名我已经可以通过命令行编译java源代码了:(因此,当您尝试使用完整路径名时,它仍然失败?请您澄清完整路径名所代表的含义好吗?`C:\Users\user>javac D:\Project\ServerCodeB\WebContent\Programs\Hello.java C:\Users\user>`它只有在使用Oracle的java实现时才是可移植的—类
com.sun.tools.javac.Main
很可能不是。)例如,在IBM的实现中不可用。它将用于Oracle Java的未来版本。@Jesper:你是对的,我的意思是它可以在更多系统(Windows、Linux等)上使用,这些系统都是用更便携的版本编辑的(用户使用的是1.6,所以应该可以)只有在使用Oracle的Java实现时,它才是可移植的—例如IBM的实现中很可能没有类
com.sun.tools.javac.Main
。它将用于Oracle Java的未来版本。@Jesper:你是对的,我的意思是它可以在更多的系统(Windows、Linux等)上使用使用更便携的版本编辑(用户使用的是1.6,所以应该可以)