Java动态编译

最近在研究Java动态编译的内容,主要就是看InfoQ上的Java深度历险,但是我在我的Eclipse下去尝试那些作者的代码并不是很顺利

		StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
程序在运行到这里的时候发生了Exception为

Exception in thread "main" java.lang.NullPointerException
	at com.vortex.test.Calculator.calculate(Calculator.java:48)
	at com.vortex.test.Calculator.main(Calculator.java:93)
空指针的异常,查看了一些资料,主要因为我们的jre环境不对,在Eclipse下应该在window->preferences->java->instanlled jres 下选择为jdk 中的jre例如C:\Program Files\Java\jdk1.6.0_21\jre

那么就可以运行正常了。

Eclipse 编译过后的class文件是存储在bin目录下的,我们如果想让动态编译过的类也在bin目录下要增加编译的参数

		Iterable<String> options = Arrays.asList("-d", ".\\bin");
		CompilationTask task = compiler.getTask(null, fileManager, null, options, null, fileObjects);
如何加载并且运行刚刚编译过的类呢?

				// 采用两种方式都是可以的
//				Class<?> clazz = Class.forName("com.vortex.test." + className);
				Class<?> clazz = loader.loadClass("com.vortex.test." + className);
				Object obj = clazz.newInstance();
				Method method = clazz.getMethod(methodName, new Class[]{});
				Object value = method.invoke(obj, new Object[]{});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值