JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int results = compiler.run(null, null, null, "JavaProgramming.java");
出现java.lang.NullPointerException的错误,已经排查出就是在 int results = ......这句出错。调用代码是在jsp文件中写的,javaprogramming.java和jsp文件在同一目录下,java文件内容很简单,就是显示"hello",应该没有问题,为什么会是空指针错误呢?
int results = compiler.run(null, null, null, "JavaProgramming.java");
出现java.lang.NullPointerException的错误,已经排查出就是在 int results = ......这句出错。调用代码是在jsp文件中写的,javaprogramming.java和jsp文件在同一目录下,java文件内容很简单,就是显示"hello",应该没有问题,为什么会是空指针错误呢?
int run(InputStream in,
OutputStream out,
OutputStream err,
String... arguments)使用给定 I/O 通道和参数运行工具。按照惯例,工具如果运行成功,则返回 0;如果出现错误,则返回非 0 值。任何生成的诊断都将以某种未指定的格式写入 out 或 err。 参数:
in - “标准”输入;如果为 null,则使用 System.in
out - “标准”输出;如果为 null,则使用 System.out
err - “标准”错误;如果为 null,则使用 System.err
arguments - 要传递给工具的参数
返回:
如果成功,则返回 0;否则返回非 0 值
抛出:
NullPointerException - 如果参数数组包含任何 null 元素。
我测试了一下,如果找不到文件的话会提示找不到文件,不会抛异常.
如果用文件的绝对目录,可以正确编译,不知道你的参数有什么问题.
import javax.tools.ToolProvider;public class Main { public static void main(String[] args) {
// TODO code application logic here
System.out.println("Hello World");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, "/home/superzxt/NetBeansProjects/Test/src/test/Hello.java");
}
}正常编译,运行之后会得到Hello.class文件.
获取此平台提供的 Java™ 编程语言编译器。
返回:此平台提供的编译器;如果没有提供编译器,则返回 null
http://blog.csdn.net/sunyujia/archive/2008/05/02/2359194.aspx
http://blog.csdn.net/sunyujia/archive/2008/05/02/2359194.aspx
String filePath = new File(CreateTest.class.getClassLoade().getResource("").getFile()).getAbsolutePath();
String[] source = { "-d", path, new String("DynamicObject.java") };
com.sun.tools.javac.Main.compile(source);
运行到最后一句的时候报错:无法读取?是什么原因啊?? 第二种方式:
String curDir = System.getProperty("user.dir");
String path = curDir+"\\WEB-INF\\src\\factory\\DynamicObject.java";
JavaCompiler compiler = (JavaCompiler) ToolProvider.getSystemJavaCompiler(); int results = ((Tool) compiler).run(null, null, null, path);
运行到最后抛出java.lang.NullPointerException
第三种方式:
String curDir = System.getProperty("user.dir");
String path = curDir+"\\WEB-INF\\src\\factory\\DynamicObject.java";
JavaCompiler jc = (JavaCompiler) ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager sjfm = jc.getStandardFileManager(null,null, null);
File javaFile = new File(path);
Iterable fileObjects = sjfm.getJavaFileObjects(javaFile);
jc.getTask(null, sjfm, null, null, null, fileObjects).call();
sjfm.close();
抛出java.lang.NullPointerException
,由此可以知道应该是jre的问题,但是在windows麽有ide的情况下,我也不知道怎么解决,主要是不知道如何使程序运行在我们指定的jre中