`
liubuzhudeyun
  • 浏览: 12208 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();出现空指针异常的问题 .

    博客分类:
  • java
 
阅读更多
原文出处:http://blog.csdn.net/xinfuqizao/article/details/4165772

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();可以获得环境下边的编译器的引用,但为什么我们在debug到这一语句的时候,查看到此函数返回的是一个null值,即没有编译器。。。。



我们知道,jre是java runtime environment,我们在运行java程序的时候其实就是调用jre里面的java.exe或者javaw.exe,后者不会有dos框跳出(这是在后台执行java程序的命令)。



我们安装jdk1.6的时候,会在安装包java下发现jdk1.6.0_07和jre1.6.0_07两个文件夹,在jdk1.6.0_07下有一个jre包,包里的内容和jre1.6.0_07文件夹下的内容是一样的。这是因为我们在开发程序的时候需要用到jre,所以jdk1.6.0_07下有一个jre包,但只运行java程序的时候,只会用到jre1.6.0_07下的命令。



弄清楚这一点,问题就好说了,我们要获得编译器,可是jre1.6.0_07文件夹下根本没有编译器,所有我们应该使用jdk1.6.0_07文件夹下的jre,如果我们用的IDE是MyEclipse的话,在windows=》pereference=》java=>installl jre里面,添加我们需要的jre,并勾选它。这样在MyEclipse中出现的空指针异常就解决了哦。。。。。



为什么我们用命令行执行相同的程序不会出现那个空指针异常呢,那是因为我们在寻找jre的时候是在优先考虑jdk下的jre的,但eclipse下是指定了jre的,所有我们在命令行下不会出错。。



如果你把程序打包成可以双击的jar文件,问题可能又来了,双击jar文件,其实是调用了jre的java -jar命令的,这个jre不是我们想要用的jre,修改如下:



在IE中的文件夹选项中,选择"文件类型"
找到jar类型的文件
点击"高级"

open

编辑

可以看到"C:/Program Files/Java/jdk1.6.0_07/bin/javaw.exe" -jar "%1" %*

这是我已经改好的路径,路径错的就按这个改过来吧。。。。。

分享到:
评论

相关推荐

    通过JavaCompiler进行编译java文件(转载)

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); ``` 然后,我们需要创建一个`StandardJavaFileManager`对象,它负责管理源文件、类文件和其他资源的输入和输出。这个管理器可以帮助我们组织编译...

    java深度历险.pdf

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); Iterable<? extends JavaFileObject> ...

    java 动态编译.java文件,动态运行类

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); ``` 2. **定义标准文件管理者**:`StandardJavaFileManager`接口用于管理源文件和目标文件的输入输出。它可以帮助我们找到.java文件并处理编译结果...

    内存中动态编译执行java代码

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); ``` 接下来,我们需要创建一个`JavaFileManager`的实例,它是用于管理编译过程中涉及的文件对象的接口。我们通常会使用`StandardJavaFileManager`...

    java 动态编译.java文件,动态运行类 _1.1

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); ``` 2. **编译任务**:我们需要创建一个CompilationTask,它是编译过程的代表。这可以通过调用JavaCompiler的getTask方法实现,该方法需要提供一个...

    java 动态编译.java文件,动态运行类 _1.2

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); ``` 3. **设置标准文件描述符** `StandardJavaFileManager`接口用于管理源文件和编译结果。通过`compiler.getStandardFileManager()`获取实例,...

    在程序中实现对java源文件编译的3种方法.pdf

    JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, null, null, compilationUnits); boolean result = task.call(); fileManager.close(); ``` #### 方法三:使用第三方库如...

    kotlin-compiler-embeddable-1.3.61.jar

    官网版:kotlin-compiler-embeddable-1.3.61

    Java动态编译执行代码示例

    JavaCompiler.CompilationTask task = compiler.getTask(null, manager, null, ops, null, it); //执行编译任务 task.call(); 需要注意的是,如果java代码中引用了其他代码,需要将引用代码路径设置到-classpath中...

    java代码的方式对java源码进行编译并打包成jar

    int result = compiler.compile(sources, fileManager); if (result == 0) { System.out.println("Compilation successful"); } else { System.err.println("Compilation failed"); } fileManager.close(); ...

    kotlin-compiler-embeddable-1.4.10.jar

    文件:kotlin-compiler-embeddable-1.4.10.jar下载,kotlin开发必备

    Java深度历险

    接着,我们使用`ToolProvider.getSystemJavaCompiler()`方法获取系统默认的Java编译器实例。然后,通过`JavaCompiler`接口提供的方法,我们创建了一个`StandardJavaFileManager`对象,并使用自定义的`...

    kotlin-compiler-embeddable-1.3.50.jar

    kotlin-compiler-embeddable-1.3.50.jar下载后直接可用(亲测)。Could not download kotlin-compiler-embeddable.jar,是墙的原因 没有下载下来kotlin-compiler-embeddable.jar的jar包资源。 把下载好的jar,放在...

    java反射机制测试代码

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); File sourceFile = new File("path/to/your/...

    jasper-compiler-jdt-5.5.15.jar

    jasper-compiler-jdt-5.5.15.jar 是 JasperReports 库的一个关键组件,专门用于解决与编译相关的异常,特别是那些涉及到 org.eclipse.jdt.internal.compiler.ICompilerRequestor 的问题。 ICompilerRequestor 是 ...

    JavaCompiler --JDK6 API的简介(java动态编译)

    首先,我们可以通过 ToolProvider 类的静态方法 getSystemJavaCompiler 来得到一个 JavaCompiler 接口的实例。然后,我们可以使用 JavaCompiler 的 run 方法来编译 Java 源代码。run 方法有四个参数,分别是 input ...

    Java语言-动态编译代码并热加载类

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); Iterable<? extends JavaFileObject> fileObjects...

    kotlin-compiler-client-embeddable.jar

    kotlin-compiler-client-embeddable.jar

Global site tag (gtag.js) - Google Analytics