首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回null的JavaCompiler

返回null的JavaCompiler
EN

Stack Overflow用户
提问于 2012-02-23 05:51:45
回答 2查看 2K关注 0票数 0

我正在创建一个类似于Codingbat.com的程序。

在运行时,它需要编译代码,然后执行它。这些都已经处理好了。目前,我被迫使用JavacTool,这就要求它必须与之一起打包。

我有两个基本问题:

1)在可执行jar中运行时,如何阻止ToolProvider.getSystemJavaCompiler()返回null?

2)如果不能做到上述情况,有没有办法添加com.sun.tools.javac.api.JavacTool;的jar,而不是将它作为引用库,这样它就可以像常规导入一样工作?

感谢您的回答,如果您愿意,我可以上传带有被引用的库的Jar,以及没有它的jar。

为了清楚起见,使用引用库的jar可以工作,但是它太大了,而且比使用JavaCompiler而不是JavacTool的通过eclipse运行的jar要慢。

谢谢

编辑:

我很确定用java可以做到这一点,就像我以前见过的那样,但是忘记了在哪里和如何做到的。

EN

回答 2

Stack Overflow用户

发布于 2012-02-23 05:54:06

我怀疑这只是你运行哪个版本的Java的问题。如果运行JRE附带的版本,它将没有可用的工具。如果您运行JDK附带的版本,它将会。

举个例子,下面是一个简短但完整的程序:

代码语言:javascript
复制
import javax.tools.*;

public class Test
{
    public static void main(String[] args)
    {
        System.out.println(ToolProvider.getSystemJavaCompiler());
    }
}

在我的笔记本电脑上用java.exe的JRE版本运行它:

代码语言:javascript
复制
c:\Users\Jon\Test>"\Program Files\java\jre7"\bin\java Test
null

现在使用JDK:

代码语言:javascript
复制
c:\Users\Jon\Test>"\Program Files\Java\jdk1.7.0"\bin\java Test
com.sun.tools.javac.api.JavacTool@441944ae

因此,请尝试显式指定与JDK关联的Java二进制文件。

票数 2
EN

Stack Overflow用户

发布于 2012-02-23 08:49:34

因此,您已经知道所有用户都将安装JDK,并且知道如何在Java程序中查找JDK的类路径。您不需要加载DLL。您需要在tools.jar中加载com.sun.tools.javac.api.JavacTool类。有关如何加载tools.jar的信息,请参见How to load a jar file at runtime

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9403655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档