JDK6新特性之Compiler

浏览了 JDK6 的新特性 , 感觉 Compiler API 的应用有很大空间 , 它提供对代码的编译功能也就意味着在运行时可以实现代码编辑 , 编译及加载运行 . 可以在系统运行中动态配置和扩展用户自定义的功能 , 甚至可以把 Java 语句作为脚本内嵌到原有系统中扩充功能集 .
 
下面是我参阅 Jdk6 API Document 测试 Compiler 的例子 . 开发环境 :Window XP+JDK1.6+Eclipse3.2
  • Step1: 创建一个 Java 项目 Test
一定要确认 JRE 的配置 , 进入 Configure JREs... 如下图:
   
       如果 JDK 不是来源于 JDK 下的 Jre 会引发 ToolProvider 获取不到 compiler. 在缺省状态, Eclipse 会搜索到 Jre1.6..0 安装目录下的 Jre. 此目录下不包含 Compiler 工具 Javac, 需要下载安装 JDK1.6.
        
  •  Step2:准备好待编译文件Hello.java和测试代码Compiler.java.

创建目录C:/Java/SWT/src/com/gotop/study,编写Hello.java,代码没有限制,可自行编写一个:

//Hello.java
package com.gotop.study;   
import java.util.Date;   
public class Hello   
{   
    public String getHelloWorld()  
    {  
        return "现在的时间为:"+new Date();   
    }  
}
//Compiler.java
package com.gotop.study.swt;
 
import java.io.File;
 
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
 
public class Compiler {
    public static void main(String args[]) {
       try {
           JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager sjfm = jc.getStandardFileManager( null , null , null );
      
File javaFile = new File( "c:/java/swt/src/com/gotop/study/Hello.java" );
 
           Iterable fileObjects = sjfm.getJavaFileObjects(javaFile);
           jc.getTask( null , sjfm, null , null , null , fileObjects).call();
//        Add more compilation tasks
           sjfm.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
    }
}
运行即可,在目录C:/Java/SWT/src/com/gotop/study/下你发现:Hello.class表示Compiler run OK.
如果出现以下异常:
java.lang.NullPointerException
    at com.gotop.study.swt.Compiler.main( Compiler.java:14 )
说明你的 JRE 设置有问题 .
 
关于Compiler的使用,如设置编译参数等可以参考以下Link,有比较详尽的描述:
http://java.sun.com/javase/6/docs/api/javax/tools/ToolProvider.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值