ToolProvider.getSystemJavaCompiler() return null 的解决方法
【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 指針異常):
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【2】 解決方法
2.1)通過 ?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 文件夾中;
總結
以上是生活随笔為你收集整理的ToolProvider.getSystemJavaCompiler() return null 的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金婚是多少年算金婚 多少年是金婚
- 下一篇: JavaBean 持久化