知识大全 在SE6中调用编译器的两种方法[2]
Posted 知
篇首语:高斋晓开卷,独共圣人语。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在SE6中调用编译器的两种方法[2]相关的知识,希望对你有一定的参考价值。
Java进阶:在SE6中调用编译器的两种方法[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
二 使用StandardJavaFileManager编译Java源程序
在第一部分我们讨论调用java编译器的最容易的方法 这种方法可以很好地工作 但它确不能更有效地得到我们所需要的信息 如标准的输入 输出信息 而在Java SE 中最好的方法是使用StandardJavaFileManager类 这个类可以很好地控制输入 输出 并且可以通过 DiagnosticListener得到诊断信息 而DiagnosticCollector类就是listener的实现
使用StandardJavaFileManager需要两步 首先建立一个 DiagnosticCollector实例以及通过JavaCompiler的getStandardFileManager()方法得到一个 StandardFileManager对象 最后通过CompilationTask中的call方法编译源程序
在使用这种方法调用Java编译时最复杂的方法就是getTask 下面让我们讨论一下getTask方法 这个方法有如下所示的 个参数
getTask(Writer out JavaFileManager fileManager DiagnosticListener diagnosticListener Iterable options Iterable classes Iterable pilationUnits)
这些参数大多数都可为null 它们的含义所下
·out: 用于输出错误的流 默认是System err
·fileManager: 标准的文件管理
·diagnosticListener: 编译器的默认行为
·options: 编译器的选项
·classes 参与编译的class
最后一个参数pilationUnits不能为null 因为这个对象保存了你想编译的Java文件
在使用完getTask后 需要通过 StandardJavaFileManager的getJavaFileObjectsFromFiles或 getJavaFileObjectsFromStrings方法得到pilationUnits对象 调用这两个方法的方式如下
Iterable getJavaFileObjectsFromFiles( Iterable files) Iterable getJavaFileObjectsFromStrings( Iterable names) String[] filenames = …; Iterable pilationUnits = fileManager getJavaFileObjectsFromFiles(Arrays asList(filenames)); JavaCompiler CompilationTask task = piler getTask(null fileManager diagnostics options null pilationUnits);
最后需要关闭fileManager close();
下面是一个完整的演示程序
import java io *; import java util *; import javax tools *; public class test_pilerapi private static void pilejava() throws Exception JavaCompiler piler = ToolProvider getSystemJavaCompiler(); // 建立DiagnosticCollector对象 DiagnosticCollector diagnostics = new DiagnosticCollector(); StandardJavaFileManager fileManager = piler getStandardFileManager(diagnostics null null); // 建立用于保存被编译文件名的对象 // 每个文件被保存在一个从JavaFileObject继承的类中 Iterable pilationUnits = fileManager getJavaFileObjectsFromStrings(Arrays asList( test java )); JavaCompiler CompilationTask task = piler getTask(null fileManager diagnostics null null pilationUnits); // 编译源程序 boolean success = task call(); fileManager close(); System out println((success)? 编译成功 : 编译失败 ); public static void main(String args[]) throws Exception pilejava();
cha138/Article/program/Java/hx/201311/27242相关参考
Java进阶:在SE6中调用编译器的两种方法[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java进阶:在SE6中调用编译器的两种方法[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java进阶:SE6调用编译器的两种方法[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 三
Java进阶:SE6调用编译器的两种方法[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
JavaSE6调用Java编译器的两种新方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
Java调用Eclipse的编译器JDT 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 想给项目
将一个方法调用同一个方法主体连接到一起就称为绑定(Binding)若在程序运行以前执行绑定(由编译器和链接程序如果有的话)就叫作早期绑定大家以前或许从未听说过这个术语因为它在任何程序化语言里都是不
以上是一个多数熟悉单线程编程的人在第一反应下给出的实现方法但是该类在运行的时候输出的结果却不是期望的HelloWorld!而是Hello这是由于线程的竞争条件导致的
.NET的动态编译与WS服务调用详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了N
ASP.NET预编译Web应用程序规避调用延迟 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! A