• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

忘记Dart –您现在可以执行显示HTML的Java代码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我们采访了创新者Anton Epple,以了解有关HTML和Java之间的新链接以及他在JavaOne年度会议上期待的内容的更多信息。

你能告诉我们一些吗?

安东·埃普尔(Anton Epple):两年前,我注意到JavaScript正在兴起,甚至Java程序员如果想在客户端的浏览器中执行一些代码,也不得不使用它。 对我来说,JavaScript只是另一种汇编语言。 人们不应该直接使用它,就像他们不再直接使用x86指令集一样。 用某种真实的语言编写并生成JavaScript很好,但是直接编码JavaScript毫无意义。 它是用于简单脚本编写的语言。

用JavaScript编写的所有大字体很快就会成为WONTA:只需编写一次,再也不要碰。 因此,我开始探索用Java代替JavaScript会怎么做,但仍然保留HTML。 许多JavaEE框架也尝试隐藏JavaScript,但是我对纯客户端(一种无服务器的应用程序)更感兴趣。 类似于Cordova,但无需使用JavaScript编写代码。

您是如何创建API的?

与其他语言相比,Java以其冗长而著称。 我为自己设定的一个目标是创建一个API,该API可使Java中的程序比JavaScript中的同类程序短。 这并不容易,但是我相信我对Java API设计的了解非常了解(甚至还写了几有关该主题的 ),因此我利用了Java API设计人员拥有的最强大的工具:注释处理器。 最后,我相信我实现了目标。 使用HTML / Java API编写的应用程序通常比原始基于JavaScript或Dart的示例短。

我需要避免的一件事是经典JavaBean模式及其获取器和设置器的冗长性。 我设法用@Model注释做到了。 只需定义属性及其类型,即可在编译期间生成整个JavaBean类。 最初,这可能会让人感觉有些颠倒,但是人们已经习惯了它,并发现它富有成效。 顺便说一句,之前已经有一些尝试这样做(想到Lombok项目),但是我的解决方案不需要任何技巧。 它是由标准Javac编译的100%有效的Java代码。 另一个问题是有效地表示HTML页面并使之“生动”。

选项很少,但我最喜欢的是基于基因敲除.js,后者是四个最受欢迎JavaScript库之一。 它允许通过绑定到模型来注释HTML元素(请参阅其优秀的文档 ),并且只要模型发生更改,就可以相应地更新DOM树。

当然,淘汰赛期望使用JavaScript进行建模,所以我的主要任务是确保可以用Java编写该模型,并生成其余的代码。 我再次使用@Model 注释 顺便说一句。 该实现不是特定于Knockout的,而是在Java / JavaScript桥中插入了SPI,因此人们可以为自己喜欢的技术实现绑定。

目前,我知道controls.js的绑定-一种很有前途的触摸式功能强大HTML小部件,因此人们可以在Java应用程序中使用这些控件,而不使用带有组合键HTML。 这两个案例使我相信,应该可以集成其他绑定技术,例如angular.js(另一个流行JavaScript框架)。 几乎每个JavaScript应用程序都执行的最后一种操作是使用JSON –将数据发送到服务器并以通常异步的方式获取答复。

经典方法需要一些回调接口,但我决定使用另一个注释解决该问题: @OnReceive 它再次生成样板代码,因此,与服务器之间来回传输数据仅需几行代码。 实际上,当比较原始JavaScript示例的大小时,这就是新HTML / Java API真正擅长的领域。 用于异步REST或WebSocket通信的Java代码比其JavaScript计数器部分短。

您声称可以在所有地方部署这些应用程序吗?

真正。 尽管HTML / Java API主要是为NetBeans设计的,但它被创建为尽可能“轻巧”-它具有尽可能小的运行时依赖性-它不依赖于任何其他库(而是将SPI公开给允许使用不同的实现),因此不需要执行功能齐全的Java SE-它可以在其他Java虚拟机上运行。 即使那些仅支持现在称为Java的子集的组件。

我作为一个简单示例使用的扫雷游戏可作为NetBeans的模块在AppStoreGoogle Play上购买 ,也可直接在浏览器中运行。

真的到处都是吗?

真。 您所需要的就是执行Java代码和显示HTML的能力。 当然,这并不意味着您当前的基于Swing的应用程序将在任何地方运行,但是如果您使用HTML / Java Maven原型或适当的NetBeans IDE 向导创建应用程序并考虑到可移植性对其进行开发,则可以确保它在任何地方都可以运行。 首先,我们可以使用JavaFX的Web视图在桌面上运行。

这对于调试(Java和DOM结构)以及快速开发应用程序非常有用。 准备就绪后,您可以将应用程序发布为独立的JAR或将其嵌入到现有的JavaFX(以及Swing)应用程序中。 这是我们现在在NetBeans中使用HTML / Java的方式,也是我想将HTML / Java集成到Eclipse中的方式。

手机还是浏览器?

Android很简单。 有一个可以执行Java代码的Dalvik VM,还有一个可以显示HTML的WebView小部件。 连接它们只是“必要”的。 好吧,说“只是”有点夸张,因为我花了许多不眠之夜去做:Java和Web视图之间的通信在Android上是异步的,特别是递归调用变得棘手。 但是现在它已经准备好了,而且由于有了HTML / Java TCK (包含数百个测试),我们知道它的行为与其他系统相同。 我以为iOS会是一个挑战,但是由于有了RoboVM项目,这并不难。 RoboVM接收Java字节码并将其转换为LVVM汇编程序代码(与Objective-C所针对的汇编程序相同),结果产生了相同的本机代码,但是可以用Java编写代码,而无需遭受Objective-C的困扰。

除此以外,RoboVM还提供对本机iOS小部件(包括WebView组件)的绑定。 绑定Java和JavaScript是“仅”必要的。 这次更容易了,因为对Web视图的调用在iOS上是同步的,并返回结果值。 然后我们有了浏览器。 显示HTML当然很容易,我们被HTML页面所包围。 但是我们应该如何执行Java? Java插件已被Firefox和Chrome禁止使用,无论如何它都感觉有些重量级。 让我们编写一个使用字节码并生成JavaScript的虚拟机! 这实际上就是我开始的地方:我编写了自己的VM,名为Bck2Brwsr 两年前,就在JavaOne之后,我设法在HTML页面中执行了第一个应用程序– 一个简单的计算器

这怎么可能?

虚拟机采用字节码并将每个指令转换为JavaScript代码段。 转换通常在桌面上进行时提前进行,但是Bck2Brwsr VM也可以进行即时编译(是的,可以直接在浏览器中加载JAR文件及其类)。 整个方法有其局限性(例如没有线程),但是VM足以执行HTML / Java应用程序。

当我谈论我的Bck2Brwsr VM时,人们常常认为这是一个疯狂的主意。 可能,但是编写JVM并不困难(更大的问题是实现库),而且我并不是唯一尝试这样做的人。 我联系了编写自己的TeaVM的 Alexey Andreev。 他非常友善,可以为HTML / Java API支持添加必要的钩子,因此扫雷游戏也可以在其VM上执行。 我相信这是HTML / Java API的可移植性的一个很好的例子。

那么这是否意味着Dart对于Java程序员来说已经过时了?

我会这样说。 上周五,在奥地利维也纳举行了JavaDay会议。 它从谈论Dart和Angular(Java会议!)开始,并以一种看起来像一种语言的语言(而不仅仅是另一种汇编器(如JavaScript))编写单页HTML应用程序的能力给观众留下了深刻的印象。 我可以感觉到他们在想:“我应该学习Dart来做这么酷的事情吗?”。
因此,我借用了HTML&Dart源代码,并在接下来的三个小时内将它们重写为HTML / Java。 轮到我时,我可以在观众面前站起来并告诉他们:“嘿,您不必学习Dart,坚持使用Java,使用HTML / Java API和Knockout绑定,也可以做到这一点!” 我想引起了我的注意并赢得了掌声。

您对今年的JavaOne最期待什么话题?

我必须承认,我不知道。 我非常忙于自己的演讲和演示,所以我还没有时间查看时间表。 我只想遇见有趣的人,并度过愉快的时光。 同时,我将讨论API设计[9月30日星期二,12:30 – 13:30,希尔顿–皇家宴会厅A],这通常是一个引起关注的主题。 我说服RoboVM的Niklas Therning做一个关于替代虚拟机的BOF [9月29日,星期一19:00 – 19:45,Moscone South – 305],我真的很期待:我设想了两个极客,他们会亲自回答像这样的问题:“您是如何实现弱引用,线程,类加载,绑定到本地方法等的” 并显示VM内部。
然后,当然还有HTML / Java和周围的生态系统,它们由Toni Epple命名为“ DukeScript”。 Toni将进行演讲[9月29日星期一,14:30-15:30希尔顿金门大桥4/5],我们将做一个教程[9月30日,星期二,8:30 – 10:30:希尔顿– A广场]好。 我对此感到有点紧张–我知道HTML / Java技术具有巨大的潜力,但是我不确定它是否会引起足够的关注。

翻译自: https://jaxenter.com/forget-dart-can-now-execute-java-code-displays-html-111438.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap