【问题标题】:Include Javac in Java applet在 Java 小程序中包含 Javac
【发布时间】:2011-08-01 10:30:22
【问题描述】:

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

在某个地方可能有关于这方面的文章吗?我找不到太多关于此案的信息。我会遇到什么麻烦?

编辑:我打算将小程序与 OpenCL 一起使用,所以我必须签署小程序。

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

【问题讨论】:

  • 请有look at的问题,可以帮到你。
  • 为什么要用解释型语言来做这件事?
  • 什么意思? Java需要编译成字节码才能运行。

标签: java compiler-construction applet


【解决方案1】:

Java 编译器始终与您同在。你应该使用java.lang.Compiler 类。但我相信你会遇到 SecurityManager 的问题。

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

【讨论】:

  • 我想过这个,我认为这确实是更简单的方法。然而,这将花费用户的带宽和时间,所以如果可能的话,我想在客户端进行编译。此外,它可能会引发一些安全问题。
  • 用户不会因此而爱你(applet 已经够慢了);)
  • Java Webstart 也可以。但这不会改变情况;它从浏览器运行。
  • 我将此标记为答案,因为我可能会使用 Compiler 类。我将对此进行更多研究。
  • Java 编译器始终与 JDK 一起使用。它没有在 JRE 中提供,所以它不是“永远和你在一起”。
【解决方案2】:

来自SSCCE Text Based Compiler上的文档:

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

【讨论】:

  • 在您引用的文本上方有一个 webstart 链接。我想如果你提供一个 tools.jar 就可以了。
  • 是的。如果用户安装了 JDK,只需像我在该代码中所做的那样,让他们确定它在哪里。另请参阅Add the compiler to the application's runtime classpath 下的注释。
  • 如果我为我的 webstart 提供 OpenJDK 的 tools.jar,那么是否可以只使用 JRE 进行编译?
  • 你尝试的时候发生了什么?我没有,但会对你的报告感兴趣。
  • 目前我没有专门的电脑可以试用,过几天我会试用。问题是我在网上找不到tools.jar,所以必须先安装完整的JDK。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多