使用 GWT 编译器将 Java 转换为 JavaScript

2024-02-02

我写了一些 Java 代码,想将其转换为 JavaScript。 我想知道是否可以使用GWT编译器将提到的Java代码编译为JavaScript代码保留所有名字方法、变量和参数。 我尝试使用 -draftCompile 关闭代码优化来编译它,但方法名称被破坏。 如果 GWT 编译器不能做到这一点,其他工具可以吗?

Update

Java 代码仅依赖于 GWT 模拟类,因此 GWT 编译器肯定能够处理它。

Update 2

这个Java方法:

public String method()

被翻译成这个 JavaScript 函数:

function com_client_T_$method__Lcom_client_T_2Ljava_lang_String_2()

使用编译器选项:

-style DETAILED
-optimize 0
-draftCompile

所以名字不能保留。但有没有办法控制它们的改变方式呢?

澄清

举例来说,您有一个用 Java 编写的排序算法(或其他一些简单的数学实用程序)。 sort() 方法接受一个整数数组。并以排序后的数组形式返回这些整数。现在说,我有 Java 和 JavaScript 应用程序。我想在 Java 中编写一次这个方法,通过 GWT 编译器运行它,并保持方法名称相同,或者以可预测的方式更改它,这样我就可以检测到它并知道如何将其更改回排序( )。然后我可以将该代码放入我的 JavaScript 应用程序中并使用它。如果 Java 版本发生变化,我还可以自动重新生成它。从技术上讲,我有一个很好的理由,我在较高层次上理解 GWT 的概念,我只是在寻找这一点的答案。

结论

主要问题的答案是NO。 虽然方法名称可以在一定程度上保留,但其主体不可用。其中的方法调用分散在生成的文件中,因此它们不能在 JavaScript 库中使用,而这正是本主题的重点。


尽管您可以将编译器设置为输出“漂亮”代码,但我建议您为要从 GWT 项目外部调用的类编写导出函数。我相信 GWT 文档中的某个地方详细介绍了如何执行此操作,但我找不到它,所以这里是我刚刚创建的示例。

class YourClass {
    public YourClass() {
        ...
    }

    public void yourMethod() {
        ...
    }

    public static YourClass create() {
        return new YourClass();
    }

    public final static native void export() /*-{
          $wnd.YourClass = function() {
              this.instance = new @your.package.name.YourClass::create()()
          }

          var _ = $wnd.YourClass.prototype;
          _.yourMethod = function() {this.ins[email protected] /cdn-cgi/l/email-protection::yourMethod()()}
    }-*/;
}

EDIT

详细地说,您的代码将像平常一样被混淆,但由于导出功能,您可以轻松地从外部引用这些函数。你don't必须用 JavaScript 重写 Java 类中的任何内容。您只需在 JavaScript 中编写引用,因此可以执行以下操作:

var myInstance = new YourClass();
myInstance.yourMethod();

当然,您必须从 GWT 应用程序中的某个位置(最有可能在您的 EntryPoint 中)调用静态导出方法才能完成此操作。

有关从 JavaScript 引用 Java 方法的更多信息:http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GWT 编译器将 Java 转换为 JavaScript 的相关文章

随机推荐

  • 在不使用 contenteditable 的情况下,防止 Firefox iframe 中的选择显示为灰色

    在 Firefox 3 及更高版本 可能还有更旧的版本 中 在 iframe 中选择内容似乎总是使用当前没有焦点的文档所使用的灰色选择背景颜色 即使 iframe 确实有焦点 我发现的唯一例外是 iframe 中的内容是可编辑的 在其他浏览
  • Graphx 可视化

    我正在寻找一种方法来可视化在 Spark 的 Graphx 中构建的图 据我所知Graphx没有任何可视化方法 所以我需要将数据从Graphx导出到另一个图形库 但我被困在这里 我遇到了这个网站 https lintool github i
  • SQL Server JDBC 的驱动程序类名是什么

    我想将我的 Java Spring Boot 应用程序连接到 SQL Server 并得到 Spring 无法加载驱动程序类的信息 我试过 spring datasource driver class name com microsoft
  • 如何在网页中隐藏 javascript 代码?

    当通过浏览器的 查看源代码 功能查看源代码时 是否可以从网页的 html 中隐藏 Javascript 代码 我知道可以混淆代码 但我更喜欢它hidden从查看源功能 我不确定其他人是否真的直接解决了您的问题 即从浏览器的 查看源代码 命令
  • 版本陷入“已拒绝”状态

    我想删除我们用于测试的旧发布模板 以清理发布管理 但是当我尝试停用模板时 我收到以下消息 要停用此版本模板 任何使用此版本的版本 模板必须具有以下状态之一 已发布 已放弃 好吧 这个消息是有道理的 我必须完成一些未完成的版本 要么完成该过程
  • 如何将 Postman 集成测试与 TeamCity 集成

    我正在 Postman 中构建一套集成测试来测试一些 RESTful API 我想在 TeamCity 中构建项目时运行这些测试 我正在考虑使用纽曼命令行集成 但我没有找到很好的例子 谁能建议一种方法来实现这一点 我能够使用 newman
  • 以编程方式关闭特定包的 java.util.logging

    我正在使用一个 SDK 它使用阿帕奇CXF http cxf apache org 内部 Apache CXF 使用java util logging默认情况下用于日志记录的包 我想更改日志记录级别INFO to WARNING或完全关闭它
  • 使用 chai-http 和 Jest 进行测试时,如何从 api 返回响应

    我正在尝试使用下面的代码测试我的节点 api 索引端点 索引 test js const chai require chai const chaiHttp require chai http const server http localh
  • Java 异常 - 线程“main”中的异常 java.lang.NoClassDefFoundError: net/sourceforge/tess4 j/Tesseract

    我试图让事情与 tess4j OCR 算法 一起工作 并且我使用以下代码 import java awt image RenderedImage import java io File import java net URL import
  • 复制 .docx 并保留图像

    我正在尝试将文档的元素从一个文档文件复制到另一个文档文件 文本部分很简单 图像是棘手的地方 附加图像来解释文档的结构 只有一些文本和 1 张图像 from docx import Document import io doc Documen
  • Xcode:如何将 MP4 文件转换为音频文件

    我想将应用程序文档文件夹中的 MP4 文件转换为音频文件 mp3 或 m4a 我已经尝试过 但无法使用 AVPlayer 播放转换后的 MP3 文件 这是我的代码 void convertMP4toMP3withFile NSString
  • Android 中的 Google 地图上的标记闪烁

    我刚刚开始Android应用程序开发 按照本教程开发了Google地图应用程序并在Google地图上添加了标记 http mobiforge com developing story using google maps android ht
  • 获取用户头像大小的照片

    我正在使用 C 开发 Facebook 网站应用程序 我可以使用以下方式获取信息 FacebookClient FBApp new FacebookClient getAccessToken dynamic user FBApp Get m
  • g++编译错误

    我是 Ubuntu 的新手 我尝试编写一个简单的 Hello World Ubuntu 11 04 中的 c 代码 该代码 在终端中 gcc Wall W Werror tex cpp o tex 但编译器返回了很多错误 tmp ccL8c
  • 用于本地化的流畅 NHibernate 映射

    我正在尝试从 NHibernate 映射构建数据库 但遇到了问题 我有许多具有本地化字符串值的类 public class MyClass1 public virtual int Id get set public virtual Shor
  • 如何创建私有类方法?

    这种创建私有类方法的方法是如何工作的 class Person def self get name persons name end class lt lt self private def persons name Sam end end
  • Dart 异常:已经为元素 x 注册了(聚合物)原型

    我有两个共享相同飞镖文件的聚合物元件 在 dart 文件中 我声明了两个 PolymerElement 类 直到聚合物 0 15 0 1 都工作正常 我已将项目更新为聚合物 0 15 1 现在出现此异常 Exception Already
  • 函数参数过多

    我从我的头文件中收到此错误 too many arguments to function void printCandidateReport 我对 C 相当陌生 只需要一些正确方向的指导来解决此错误 我的头文件如下所示 ifndef CAN
  • 如何在`Axios.interceptors.request`的配置中获取Cookies的`csrftoken`?

    我怎样才能得到饼干csrftoken in Axios interceptors request的配置 Axios interceptors request use config gt if config method post confi
  • 使用 GWT 编译器将 Java 转换为 JavaScript

    我写了一些 Java 代码 想将其转换为 JavaScript 我想知道是否可以使用GWT编译器将提到的Java代码编译为JavaScript代码保留所有名字方法 变量和参数 我尝试使用 draftCompile 关闭代码优化来编译它 但方