您的位置:首页 > 编程语言 > Java开发

ToolProvider.getSystemJavaCompiler() return null 的解决方法

2016-02-22 16:09 232 查看
【1】利用java 编译器API 编译 普通的java文件

1.1)代码如下:

package com.corejava.chapter10_2;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

public class JavaCompilerTest
{
public static void main(String[] args) throws FileNotFoundException
{
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
OutputStream out = new FileOutputStream("out.txt");
OutputStream err = new FileOutputStream("err.txt");
System.out.println(compiler);
System.out.println(System.getProperty("java.home"));
int result = compiler.run(null, out, err, "com/corejava/chapter10_2/Hello.java");
if(result == 0)
{
System.out.println("bingo");
}
else
{
System.out.println("oops");
}
}
}
1.2)错误如下(null 指针异常):



[b]-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------[/b]

[b]【2】 解决方法[/b]

[b]2.1)通过  [/b]System.out.println(System.getProperty("java.home")); ,我们知道了 java.home ==  C:\Program Files\Java\jre1.8.0_60 ; 

引用 http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html 
中的解决方法,通过查看 ToolProvider 的源代码,我们知道 他需要查找 java.home 下面的 lib 里的 tools.jar 文件, 而 tools.jar 文件通常在 jdk/lib 文件夹而没有在 jre中, 所以,我们只需要把 tools.jar 复制到 你的java.home映射目录/lib/ 就可以了;

2.2)复制 tools.jar 到 C:\Program Files\Java\jre1.8.0_60\lib(java.home
== C:\Program Files\Java\jre1.8.0_60\)中后,运行结果为:



【3】 Conclusion

C1)需要知道 jvm 中的 java.home 映射的目录是什么?
不要瞎copy;

C2)知道 java.home后,就将 tool.jar copy
到 其路径下面 的 lib 文件夹中;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: