在javaapplet中包含Javac

在javaapplet中包含Javac,java,compiler-construction,applet,Java,Compiler Construction,Applet,我不想创建一个包含Java编译器的小程序,它能够从web(或文本字段)下载和编译.Java文件。 据我所知,Java编译器是基于Java的,所以这应该是可能的。 然而,我想知道的一件事是Java编译器是否能够将类文件存储在内存中,还是它需要显式的磁盘访问。 另外,我想捕捉javac产生的错误,但这是很自然的 有关于这方面的文章吗?我在这个案子上找不到什么线索。我会遇到什么麻烦 编辑:我计划将小程序与OpenCL一起使用,因此我必须对小程序进行签名 编辑:这里有一个类似的问题:Java编译器永远与

我不想创建一个包含Java编译器的小程序,它能够从web(或文本字段)下载和编译.Java文件。 据我所知,Java编译器是基于Java的,所以这应该是可能的。 然而,我想知道的一件事是Java编译器是否能够将类文件存储在内存中,还是它需要显式的磁盘访问。 另外,我想捕捉javac产生的错误,但这是很自然的

有关于这方面的文章吗?我在这个案子上找不到什么线索。我会遇到什么麻烦

编辑:我计划将小程序与OpenCL一起使用,因此我必须对小程序进行签名


编辑:这里有一个类似的问题:

Java编译器永远与您同在。您应该使用
java.lang.Compiler
class。但我相信你会对SecurityManager有意见


如果我是你,我更喜欢在服务器端编译代码。这意味着我将开发能够获取java源代码并编译它的servlet。生成的java类应该在配置为可由小程序访问的路径下通过HTTP可用,这样小程序在编译后就可以运行此类

来自以下网站上的文档:

  • javax.tools.ToolProvider
    getSystemJavaCompiler()
    的文档提到它返回“随此平台提供的编译器或
    null
    如果未提供编译器”,但没有说明为什么它可能为null,也没有说明编译器将不可用于applet或webstart应用的事实

请提个问题,也许对你有帮助。你为什么要用解释性语言这样做?你是什么意思?Java需要编译成字节码才能运行。我考虑过这一点,我认为这确实是更简单的方法。然而,这将花费用户的带宽和时间,所以如果可能的话,我想在客户端进行编译。此外,它可能会引起一些安全问题。用户不会因此而喜欢你(小程序的运行速度太慢了);)JavaWebStart也可以。但这不会改变情况;它是从浏览器运行的。我将此标记为答案,因为我可能会使用编译器类。我将对此进行更深入的研究。Java编译器始终与JDK配合使用。它不是在JRE中发布的,所以它不是“永远与你同在”。在你引用的文本上方有一个webstart链接。我想如果你提供一个tools.jar.Yes就行了。如果用户安装了JDK,只需像我在代码中所做的那样,让他们识别它在哪里。另请参阅下面的注释。如果我向我的webstart提供OpenJDK的tools.jar,那么您是否可以只使用JRE进行编译?尝试时发生了什么?我没有,但我对你的报告感兴趣。目前我没有专用电脑可以试用,我会在几天内试用。问题是我无法在线找到tools.jar,所以必须先安装完整的JDK。