【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 的解决方法相关推荐

  1. JPA-save()方法会将字段更新为null的解决方法

    JPA-save()方法会将字段更新为null的解决方法 参考文章: (1)JPA-save()方法会将字段更新为null的解决方法 (2)https://www.cnblogs.com/qingmu ...

  2. Android中View转换为Bitmap及getDrawingCache=null的解决方法

    Android中View转换为Bitmap及getDrawingCache=null的解决方法 参考文章: (1)Android中View转换为Bitmap及getDrawingCache=null的 ...

  3. laytpl语法_浅谈laytpl 模板空值显示null的解决方法及简单的js表达式

    浅谈laytpl 模板空值显示null的解决方法及简单的js表达式 laytpl 模板语法 {{ d.field }} 输出一个普通字段,不转义html 官方的说明 但d.field 为空时会显示nu ...

  4. getActionBar()为null的解决方法总结(引用他人)

    getActionBar()为null的解决方法总结(引用他人) 参考文章: (1)getActionBar()为null的解决方法总结(引用他人) (2)https://www.cnblogs.co ...

  5. Type.GetType()在跨程序集反射时返回null的解决方法

    在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型.如果使用稍有不慎,就会产生运行时错误.例如使用Type.GetType("BNameSpace.Class ...

  6. 【Android】getActionBar()为null的解决方法总结

    前言 在使用 ActionBar的时候,有时候会爆出空指针异常,这是由于应用没有获取到 ActionBar 导致的,而导致应用没有获取到 ActionBar 的原因比較多.所以我们以下就来总结一下 A ...

  7. Response.Redirect(x.aspx);跳转后session为null的解决方法

    通常我们做登陆的时候都是登录成功后为管理员保存一些信息,一般都会写类似下面的代码 if(登录成功) { Session["xx"] = "user";  Res ...

  8. SkinMagic使用后按钮加自定义图标或菜单GetMneu返回NULL的解决方法

    我们在使用SkinMagic类美化窗口之后,在程序的InitInstance函数中会加入了SetDialogSkin函数, 但我们在使用时却发现,我们添加的菜单或者按钮图标无法正常显示! 一.出现这样 ...

  9. Excel导入SQL SERVER,数字和字符会被系统自动置为NULL的解决方法

    在Excel中,我们时常会碰到这样的字段(最常见的就是电话号码),即有纯数字的(如没有带区号的电话号码),又有数字和其它字符混合 (如"区号-电 话号码")的数据,在导入SQLSe ...

最新文章

  1. 为什么 MySQL 的自增主键不单调也不连续
  2. c语言中dfs用pos做参数,使用DFS解决8-Puzzle
  3. php是否直接支持函数的重载,php函数重载的替代方法--伪重载详解
  4. 17 操作系统第四章 磁盘管理 磁盘的结构 磁盘调度算法 减少磁盘延迟时间的方法
  5. Servlet Request
  6. [高光谱] Hyperspectral-Classification-master 网络模型解析
  7. 护壁桩嵌入深度_钻孔灌注桩嵌岩深度最少多少
  8. 【学术分享】发顶会论文,怎么就那么难?
  9. 软件测试是不是IT行业最容易学的 ,大概需要多长时间,就业前景好吗?
  10. 找不到xinput1_3.dll怎么办?如何修复dll文件缺失
  11. 使用Crucible和FishEye链接svn库时遇到尝试添加或索引存储库时出现错误-版本中不存在的问题
  12. 有没有人可以解答一下?
  13. odoo14学习速记笔记
  14. vivo Z3i的usb调试模式在哪里,开启vivo Z3iusb调试模式的教程
  15. 给计算机老师的元旦祝福,2020给老师元旦祝福语
  16. seo提交工具_seo整体网站优化步骤大全
  17. 弹球游戏过关之缩短挡板(三)
  18. 20180102189刘钰
  19. iOS oc 手机摇一摇震动带音效功能
  20. oracle ora-各种常见java.sql.SQLException归纳

热门文章

  1. 24dian(牛客多校第三场)
  2. Acwing 1083. Windy数
  3. P3834 【模板】可持久化线段树 2(整体二分做法)
  4. [SDOI2012]吊灯(结论)
  5. ssl初一组周六模拟赛【2018.5.19】
  6. 「分块」数列分块入门1 – 9
  7. 纪中A组模拟赛总结(2021.7.14)
  8. IQ测试(jzoj 5048)
  9. Wannafly挑战赛24
  10. HashMap在java并发中如何发生死循环