`

Java 1.6动态编译器 null问题

    博客分类:
  • Java
 
阅读更多

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);
        }
分享到:
评论

相关推荐

    JAVA1.8和1.6的API中文文档

    Java 1.8和1.6 API中文文档是开发者学习和使用Java编程语言的重要参考资料,它们详尽地列出了这两个版本中的所有类、接口、枚举和注解,以及它们的方法和属性。以下是对这两个版本API的主要知识点的详细说明: **...

    jdk1.6+1.8.zip

    JDK 1.6和1.8是两个重要的版本,它们在Java发展历程中扮演着关键角色。本篇文章将深入探讨这两个版本的主要特性和差异。 一、JDK 1.6 1. **增强的性能**:JDK 1.6着重提升了运行效率,包括垃圾收集器优化,提升了...

    java1.6源码-CompileInMemory:一个Java库,用于使用JDK1.6或更高版本完全在内存中编译源代码

    《深入解析Java1.6源码:CompileInMemory——完全在内存中编译源代码的实践》 在软件开发过程中,编译是必不可少的一环,它将人类可读的源代码转换为计算机可执行的字节码。Java 1.6引入了一种新的编译方式,名为...

    jdk1.6 和jdk1.8中文api

    Java开发工具包(Java Development Kit,简称JDK)是Java编程语言的核心组件,它包含了编译器、运行环境以及各种工具,使得开发者能够编写、测试和运行Java应用程序。本资源包含的是JDK 1.6和JDK 1.8的中文API文档,...

    1.6,1.8的javaAPI

    4. **动态代理**:通过java.lang.reflect.Proxy,可以在运行时创建代理对象,实现接口动态方法调用。 5. **NIO.2**(New IO 2):虽然在Java 7中正式引入,但Java 6的更新也为NIO的扩展打下了基础,增强了文件系统...

    Java实现动态创建类操作示例

    Java Compiler API是Java 1.6引入的新特性,允许开发者在运行时动态编译Java源代码。 在Java中,动态创建类操作可以分为以下几个步骤: 1. 创建Java源代码字符串 2. 使用Java Compiler API编译Java源代码 3. 加载...

    JDK1.6中文版

    JDK 1.6,也称为Java SE 6,是Java平台的一个重要版本,它包含了Java编译器、Java虚拟机(JVM)、Java类库以及开发者需要的各种工具。这个版本的JDK在2006年发布,对Java编程语言进行了许多改进和增强,以提升性能、...

    JDK1.6(中)与JDK1.8中英

    它包括Java编译器、Java虚拟机(JVM)、Java类库以及各种开发工具,如Javadoc和JAR打包工具等。JDK的版本更新通常会引入新的特性和性能优化,以适应不断变化的软件开发需求。 **JDK 1.6关键特性:** 1. **泛型的...

    jdk api 1.8 中文版 + JEE1.6中文版

    JDK(Java Development Kit)是Java编程语言的核心组件,包含Java运行环境、编译器以及各种工具,用于开发和运行Java应用程序。API(Application Programming Interface)则是Java语言提供的接口集合,是开发者进行...

    企业面试笔试题总汇v1.6重新编辑版

    1. **javac**:这是Java编译器,用于将Java源代码编译成字节码文件(.class文件)。常用的命令行参数包括: - `-d`:指定生成的.class文件的存放位置。 - `-g`:生成调试信息。 - `-verbose`:输出更多的信息,...

    JAVA的编程经验.pdf

    Java编程经验分享 Java作为一种广泛使用的编程语言,其特点之一就是动态加载机制。...随着Java版本的更新,如从JDK 1.4到1.6,类加载机制等特性可能会有所变化,因此持续学习和跟踪最新技术动态是保持专业性的关键。

    jdk1.5/1.6/1.7新特性

    - 编译器在 JDK 1.6 中进行了大量优化,包括提前编译、内联优化等,显著提高了 Java 应用程序的启动速度和运行效率。 3. **Java Web 组件(JSR 223):** - JSR 223 是 Java Web 组件的一个规范,它为在 Java ...

    Core Java 基础学习笔记

    **1.6 Java 开发环境** - **JDK**: Java Development Kit,包含了开发 Java 应用所需的所有工具和库。 - **JRE**: Java Runtime Environment,包含了运行 Java 应用所需的组件,包括 JVM 和标准类库。 - **JVM**: ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    1.5.2 Java编译器(Java Compiler) 17 1.5.3 Java类库(Java Class Libraries) 17 1.5.4 Java虚拟机(Java Virtual Machine) 17 1.5.5 HelloWorld的整个流程 17 1.6 小结:我们学会了编译和运行一个Java程序...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.5.2 Java编译器(Java Compiler) 17 1.5.3 Java类库(Java Class Libraries) 17 1.5.4 Java虚拟机(Java Virtual Machine) 17 1.5.5 HelloWorld的整个流程 17 1.6 小结:我们学会了编译和运行一个Java程序...

    android&java的注解详解demo

    2. **Java 8的元注解处理器**:Javac 1.6引入了注解处理器,Java 8进一步完善,使得注解处理更加灵活。 通过`AnnotationDemo`,你可以实践上述各种注解的使用,加深对Java和Android中注解的理解,并掌握如何利用...

    Java虚拟机讲解,欢迎下载

    - **JDK 1.6、1.7中的永久代(PermGen space)**:用于存放类元数据,可以通过`-XX:PermSize`和`-XX:MaxPermSize`来控制大小。 - **JDK 1.8及之后的元数据区(Metaspace)**:移到了堆外,不再受JVM堆大小的限制,但仍然...

    java实用教程

    **1.6 一个简单的Java Applet** - **定义**:Java Applet是一种在浏览器中运行的小程序。 - **创建过程**: 1. 编写Applet类,继承自`java.applet.Applet`。 2. 实现`paint`方法来绘制图形。 3. 编译并嵌入HTML...

    java 性能优化

    Java默认初始化变量至零值,如对象初始化为`null`,数值类型初始化为`0`。重复初始化变量至默认值是不必要的,尤其是子类继承自父类时,所有构造函数都会被调用。理解并合理利用这一机制,可减少不必要的初始化步骤...

    java资料面试题

    #### 1.6 Java语言的运行机制如何? Java 程序的运行机制主要包括以下几个步骤: 1. **编写源代码**:使用文本编辑器或其他 IDE 编写 Java 源代码。 2. **编译**:使用 JDK 中的 javac 编译器将源代码编译成字节码 ...

Global site tag (gtag.js) - Google Analytics