2011-08-01 88 views
1

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

有没有关于这个地方的文章呢?我无法找到很多案件。我可以走进哪些麻烦?

编辑:我打算使用OpenCL的小程序,所以我将不得不签署小程序。

编辑:类似的问题在这里:Hosting the Java compiler in an applet or in Google AppEngine?

+0

请有[查看](http://stackoverflow.com/questions/616532/on-the-fly-in-memory-java-code-compilation-for-java-5-and- java-6)这个问题,可能对你有帮助。 –

+0

谢谢!看看它。 – RobotRock

+0

为什么你想用解释型语言来做到这一点? – Mikaveli

回答

1

Java编译器永远是你的。你应该使用java.lang.Compiler类。但我相信你会遇到SecurityManager的问题。

如果我是你,我宁愿在服务器端编译代码。这意味着我会开发能够获得Java源代码并编译它的servlet。生成的java类应该可以通过HTTP在配置为可被applet访问的路径下使用,因此您的applet将能够在编译后运行此类。

+0

我想过这个,我认为这确实是更简单的方法。然而,这将花费用户的带宽和时间,所以如果可能的话,我想在客户端进行编译。另外,它可能会引起一些安全问题。 – RobotRock

+0

用户不会因为那个而爱你(applets足够呆板);) –

+0

Java Webstart也不错。但这不会改变案件;它从浏览器运行。 – RobotRock

1

从文档上SSCCE Text Based Compiler

  • javax.tools.ToolProvidergetSystemJavaCompiler()的文档提到它返回“如果没有提供编译器,则提供此平台的编译器或null,但没有说明它为什么可能为空,也不知道编译器将不可用于applet或webstart应用程序。
+0

在你引用的文本上方有一个webstart链接。如果你提供了一个tools.jar,我想它会起作用。 – RobotRock

+1

是的。如果用户安装了JDK,就按照我在该代码中所做的那样进行操作,并让他们确定它在哪里。另请参阅[将编译器添加到应用程序的运行时类路径](http://pscode.org/stbc/help.html#classpath)下的注释。 –

+0

如果我想用OpenJDK的tools.jar提供我的webstart,那么只能使用JRE进行编译? – RobotRock