0

我想安排一个具有超级简单 IO(仅打印语句)的计算机模拟,而不是可以在浏览器中运行。我可以用java编程,但对Javascript知之甚少。我有一种感觉(如果我错了,请纠正我)可能可以安排一些 HTML/Javascript,这样它就可以整齐地包装一个单独的纯 java 块 - 无论是在自己的文件中,还是在更大的文件中带有标有...的区域的文件

** 在这里开始 JAVA **

** 在这里结束 JAVA **

...这样一个只知道 java 的人可以在那里编写一个 java 程序并在浏览器中查看它——只要 IO 仅限于简单的打印语句。

这可能吗?已经完成了吗?

编辑:更多背景知识......我已经编写了一个真实世界现象的计算机模拟,我希望学者能够使用和修改它。学术界比 javascript 更可能了解 java - 所以我想隐藏所有 javascript 的东西,让用户只看到 java。

4

1 回答 1

1

可以安排一些 html/javascript 以便它可以整齐地包装一个单独的纯 java 块

不,Java 之于 Javascript 就像汽车之于地毯一样。无论浏览器对 Javascript 的支持程度如何,都不能保证它们包含 Java 运行时。他们可能会,但支持 Java 的机会与支持 Flash 的机会大致相同(Flash 获胜)。它只是一个插件。

除非您将整个 Java 编译器解释器包装在 javascript 中(将它们编译为 javascript),否则您不能完全在客户端执行此操作。即使那样,它也会很慢。你可以做什么:

选项1:

  1. 让用户写一段Java代码
  2. 将块发送到服务器
  3. 添加一堆Java代码,并存储到一个文件中。即:includes,类头,方法头,两个右大括号
  4. 调用服务器上的 java 编译器。这要求您在服务器上安装 JDK。
  5. 编译类后,将其打包到一个 jar 文件中,其中包含一堆其他的静态类和一个清单文件。
  6. 使用此 JAR 文件的 URL 响应客户端。
  7. 客户端创建一个新的appletobject引用此 JAR 的标记,然后服务器将其提供给客户端。
  8. 如果用户在他的机器上有一个 JRE 并允许 Java 插件小程序本身运行,那么你就完成了。

这是最简单的方法,但它不是最理想的(尤其是客户端必须确认的所有安全警告)。你可以这样做:

选项 2:

  • 将完全静态的小程序提供给客户端
  • 不要用已编译的类打包多个类
  • 不要在运行时创建新的小程序元素,而是将 URL 传递给现有的小程序
  • 然后小程序加载编译后的类,然后用新的实现重新开始模拟。

还:

  • jar 会占用大量空间(特别是如果您不加载类),因此如果上传的源代码没有明显保存,您可能希望在服务时自动删除 jar。

选项 3:

您可以将 Java 编译为 Javascript,但仅支持非常有限的 Java 子集。

一个这样的编译器是Google Web Toolkit的一个组成部分,旨在用 Java 编写整个网站。用户不需要在他的机器上安装 Java 运行时环境,但需要将自己限制为可有效编译为 Javascript 的 Java 子集(如果我没记错的话,你需要刮掉 java.util 的一半) .


底线:您可以让用户编写Java,然后让他观察结果,但是Java编译的繁重工作应该由服务器完成。如果用户没有 Java 插件,那么他就不能编写任何 Java 代码并期望它运行。此外,您最好知道如何用 Java 编写代码,包括类加载和 Javasript -> applet 通信。

于 2013-05-25T12:05:25.857 回答