知识大全 在SE6中调用编译器的两种方法[1]
Posted 知
篇首语:怀抱观古今,寝食展戏谑。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在SE6中调用编译器的两种方法[1]相关的知识,希望对你有一定的参考价值。
Java进阶:在SE6中调用编译器的两种方法[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在很多Java应用中需要在程序中调用Java编译器来编译和运行 但在早期的版本中(Java SE 及以前版本)中只能通过tools jar中的 sun tools javac包来调用Java编译器 但由于tools jar不是标准的Java库 在使用时必须要设置这个jar的路径 而在Java SE 中为我们提供了标准的包来操作Java编译器 这就是javax tools包 使用这个包 我们可以不用将jar文件路径添加到 classpath中了
一 使用JavaCompiler接口来编译Java源程序
使用Java API来编译Java源程序有很多方法 现在让我们来看一种最简单的方法 通过JavaCompiler进行编译
我们可以通过ToolProvider类的静态方法getSystemJavaCompiler来得到一个JavaCompiler接口的实例
JavaCompiler piler = ToolProvider getSystemJavaCompiler();
JavaCompiler中最核心的方法是run 通过这个方法可以编译java源程序 这个方法有 个固定参数和 个可变参数(可变参数是从Jave SE 开始提供的一个新的参数类型 用type… argu表示) 前 个参数分别用来为java编译器提供参数 得到Java编译器的输出信息以及接收编译器的错误信息 后面的可变参数可以传入一个或多个Java源程序文件 如果run编译成功 返回
int run(InputStream in OutputStream out OutputStream err String arguments)
如果前 个参数传入的是null 那么run方法将以标准的输入 输出代替 即System in System out和System err 如果我们要编译一个test java文件 并将使用标准输入输出 run的使用方法如下
int results = tool run(null null null test java );
下面是使用JavaCompiler的完整代码
import java io *; import javax tools *; public class test_pilerapi public static void main(String args[]) throws IOException JavaCompiler piler = ToolProvider getSystemJavaCompiler(); int results = piler run(null null null test java ); System out println((results == )? 编译成功 : 编译失败 ); // 在程序中运行test Runtime run = Runtime getRuntime(); Process p = run exec( java test ); BufferedInputStream in = new BufferedInputStream(p getInputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String s; while ((s = br readLine()) != null) System out println(s); public class test public static void main(String[] args) throws Exception System out println( JavaCompiler测试成功! );
编译成功的输出结果
编译成功
JavaCompiler测试成功
编译失败的输出结果
test java: : 找不到符号
符号 方法 printlnln(java lang String)
位置 类 java io PrintStream
System out printlnln( JavaCompiler测试成功! ); ^
错误
编译失败
cha138/Article/program/Java/hx/201311/27241相关参考
Java进阶:在SE6中调用编译器的两种方法[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java进阶:在SE6中调用编译器的两种方法[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java进阶:SE6调用编译器的两种方法[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
Java进阶:SE6调用编译器的两种方法[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 三
JavaSE6调用Java编译器的两种新方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
Java调用Eclipse的编译器JDT 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 想给项目
将一个方法调用同一个方法主体连接到一起就称为绑定(Binding)若在程序运行以前执行绑定(由编译器和链接程序如果有的话)就叫作早期绑定大家以前或许从未听说过这个术语因为它在任何程序化语言里都是不
.NET的动态编译与WS服务调用详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了N
ASP.NET预编译Web应用程序规避调用延迟 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! A
在进行多线程编程中比较重要也是比较困难的一个操作就是如何获取线程中的信息大多数人会采取比较常见的一种方法就是将线程中要返回的结果存储在一个字段中然后再提供一个获取方