Java 1.6动态编译器 null问题

1、在java程序中用JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();来获取编译器时,返回的值为NULL,经过在网上查找资料,都是jre惹的祸,

我们在装java环境时,通常会装两个,一个是jdk,一个是jre,其目录形式如下:

C:\Java-->jdk1.6.0_25

            -->jre6

但是我们在eclipse或者myeclipse中开发应用程序的时候用到的是C:\Java-->jre6,但是这个下面没有编译器

在C:\Java-->jdk1.6.0_25目录下有一个jre文件夹,其内容和C:\Java-->jre6是一样的

此时我们把eclipse或者myeclipse中的jre换成C:\Java-->jdk1.6.0_25-->jre这个jre

在更改成功之后,会重新编译工程,在编译成功之后,运行程序,就可以获取到动态编译器了

2、

 

 

ToolProvider的源代码有如下一段:

private static final String[] defaultToolsLocation
            = { "lib", "tools.jar" };
privatestatic Class<?> findClass()
throws MalformedURLException, ClassNotFoundException
        {
try {
return enableAsserts(Class.forName(defaultJavaCompilerName, false, null));
            } catch (ClassNotFoundException e) {
// ignored, try looking else where
            }
            File file = new File(System.getProperty("java.home"));
if (file.getName().equalsIgnoreCase("jre"))
                file = file.getParentFile();
for (String name : defaultToolsLocation)
                file = new File(file, name);
            URL[] urls = {file.toURI().toURL()};
            ClassLoader cl = URLClassLoader.newInstance(urls);
            cl.setPackageAssertionStatus("com.sun.tools.javac", true);
return Class.forName(defaultJavaCompilerName, false, cl);
        }

你可能感兴趣的:(java)