知识大全 SE6调用编译器的两种方法[2]
Posted 知
篇首语:但使书种多,会有岁稔时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SE6调用编译器的两种方法[2]相关的知识,希望对你有一定的参考价值。
Java进阶:SE6调用编译器的两种方法[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
三 从内存中编译
JavaCompiler不仅可以编译硬盘上的Java文件 而且还可以编译内存中的Java代码 然后使用reflection来运行它们 我们可以编写一个JavaSourceFromString类 通过这个类可以输入Java源代码 一但建立这个对象 你可以向其中输入任意的Java代码 然后编译和运行 而且无需向硬盘上写 class文件
import java lang reflect *; import java io *; import javax tools *; import javax tools JavaCompiler CompilationTask; import java util *; import java net *; public class test_pilerapi private static void pilerJava() throws Exception JavaCompiler piler = ToolProvider getSystemJavaCompiler(); DiagnosticCollector diagnostics = new DiagnosticCollector(); // 定义一个StringWriter类 用于写Java程序 StringWriter writer = new StringWriter(); PrintWriter out = new PrintWriter(writer); // 开始写Java程序 out println( public class HelloWorld ); out println( public static void main(String args[]) ); out println( System out println(\\ Hello World\\ ); ); out println( ); out println( ); out close(); //为这段代码取个名子 HelloWorld 以便以后使用reflection调用 JavaFileObject file = new JavaSourceFromString( HelloWorld writer toString()); Iterable pilationUnits = Arrays asList(file); JavaCompiler CompilationTask task = piler getTask(null null diagnostics null null pilationUnits); boolean success = task call(); System out println( Success: + success); // 如果成功 通过reflection执行这段Java程序 if (success) System out println( 输出 ); Class forName( HelloWorld ) getDeclaredMethod( main new Class[] String[] class ) invoke(null new Object[] null ); System out println( 输出 ); public static void main(String args[]) throws Exception pilerJava(); // 用于传递源程序的JavaSourceFromString类 class JavaSourceFromString extends SimpleJavaFileObject final String code; JavaSourceFromString(String name String code) super(URI create( string:/// + name replace( / )+ Kind SOURCE extension) Kind SOURCE); this code = code; @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) return code;
cha138/Article/program/Java/hx/201311/27240相关参考
Java进阶:SE6调用编译器的两种方法[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
Java进阶:在SE6中调用编译器的两种方法[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java进阶:在SE6中调用编译器的两种方法[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java进阶:在SE6中调用编译器的两种方法[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
JavaSE6调用Java编译器的两种新方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
Java调用Eclipse的编译器JDT 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 想给项目
.NET的动态编译与WS服务调用详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了N
ASP.NET预编译Web应用程序规避调用延迟 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! A
将一个方法调用同一个方法主体连接到一起就称为绑定(Binding)若在程序运行以前执行绑定(由编译器和链接程序如果有的话)就叫作早期绑定大家以前或许从未听说过这个术语因为它在任何程序化语言里都是不
以上是一个多数熟悉单线程编程的人在第一反应下给出的实现方法但是该类在运行的时候输出的结果却不是期望的HelloWorld!而是Hello这是由于线程的竞争条件导致的