gpt4 book ai didi

java - Java Applet允许Javac或其他jar访问吗?

转载 作者:行者123 更新时间:2023-12-02 07:14:49 25 4
gpt4 key购买 nike

我参与了一个项目,该项目需要通过网络运行并且可以访问java的编译器工具和/或javacc api。我的团队正在考虑使用Java小程序使其基于Web。我想知道在这种情况下applet可以做什么和不能做什么都有某些限制。我假设由于对编译器的访问将在服务器上而不是在客户端的计算机上进行,因此这将不是问题。小程序是否允许我们按所述将两者分开?

最佳答案

如果applet为signed,则applet(甚至JavaFX applet)在这种情况下也可以工作。小程序存在许多细微的陷阱,因此在使用该技术之前,我建议您进行原型设计。按照JavaFX deployment guide查看如何部署基于JavaFX的applet。

我以为要编译Java,您需要安装完整的Java开发工具包(在applet部署情况下要确保这一点很麻烦)。但是,似乎编译API包含在标准Java运行时环境随附的javax.tools API中。因此,这很可能意味着您可以开发解决方案,包括基于客户端的Java代码部署和编译,而无需用户安装完整的Java Development Kit。

或者,您可能希望考虑可以在服务器上执行编译的客户端/服务器解决方案。 TopCoder Algorithm Competition Application是这种方法的一个示例(使用基于Java WebStart的解决方案)。这是运行该应用程序的jnlp文件(http://apps.topcoder.com/wiki/display/tc/The+Algorithm+Competition+Arena)。我建议您使用该应用程序在TopCoder中注册一个ID,然后尝试使用该ID编写和编译一些代码。 TopCoder实现使用普通的Swing,就像JavaFX存在之前编写的那样,但是如果愿意,您也可以将JavaFX用于实现。

如果您还需要一个将要编译的代码的编辑器(具有语法识别的文本样式),则可以使用JavaFX中嵌入的基于此类CodeMirror的编辑器。基于CodeMirror的解决方案将编辑器包装在基于html的WebView控件中。对于JavaFX 8,您可能可以对syntax highlighting text editor使用新的TextFlow控件,但是该API尚未成为受支持的公共发行版的一部分。



更新资料

我使用此答案中概述的策略来完成这项工作。



该图像是一个html页面,允许通过applet或Webstart应用程序访问客户端代码编辑器。图像的顶部是基于WebEngine的代码编辑区域,该WebEngine带有突出显示支持Java编辑的嵌入式语法CodeMirror JavaScript编辑器。图像的底部是在客户端计算机上本地编辑器中编译代码并随后运行它的输出。输出由任何编译错误,任何输出到sysout的程序以及任何输出到syserr的运行时异常组成。解决方案的棘手部分是:


研究如何捕获sysout和syserr并将它们重定向到JavaFX控件。
查找Java编译器。


缺省的Oracle Java Runtime Environment Provider仅提供Java编译器实现的通用接口,但本身不提供Java编译器实现-该实现仅包含在jdk附带的tools.jar中。因此,当我打包小程序时,我在小程序的包装中包含了tools.jar。我在获取服务提供者接口来获取javac编译器的实例时遇到了一些困难,因此最后,我仅使用以下行实例化了它:

JavaCompiler compiler = new com.sun.tools.javac.api.JavacTool();


由于sun可能随时更改其私有com.sun类,因此上述内容有些脆弱-至少在这种情况下有效。

要注意的另一件事是,如果使用比系统可使用的运行时环境更早的javac编译器来运送tools.jar,则可能会收到如下警告:

warning: C:\Program Files\Java\jre8\lib\rt.jar(java/lang/Object.class): major version 52 is newer than 51, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.


发生上述警告是因为我将Applet附带了Java 7 tools.jar并用Java 8运行时运行了Applet(请注意,不管这些警告如何,Applet都可以正常工作)。

更新资料

我将此解决方案的代码放在 github repository (project name conception)中。更新的解决方案使用 Eclipse Compiler for Java而不是Oracle Java Compiler。主要是因为,对于Eclipse编译器,它是一个单独的jar(仅1.8meg,而不是oracle发行版的14meg工具jar),并且许可更为清晰。由于Java编译器接口是可插入的,因此,如果将tools.jar放在类路径上,则仍可以使用Oracle编译器。

关于java - Java Applet允许Javac或其他jar访问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15061757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com