浏览器中的JavaFX

浏览器中的JavaFX屏幕截图

浏览器中的JavaFX屏幕截图

最近,Carl Dea和我启动了一个新项目,将JavaFX 8引入浏览器。

今天,我想介绍我们创建的前两个概念验证,以查看该想法是否完全可行。


对于不耐烦的人,这里是到PoC的链接。

但请注意,此时启动时间太恐怖了。

JavaFX应用程序启动之前,可能很容易需要1-2分钟。

  • http://jfx8web.netopyr.com/poc1/
  • http://jfx8web.netopyr.com/poc2/

两种概念验证都以不同的颜色显示许多矩形和圆形。 实施这些形状使我们对基础技术有了一个大概的了解,并且对预期的复杂性和努力有了第一印象。 概念验证还包括一个来回移动的圆圈。 尽管此动画绝非壮观,但它为我们提供了预期性能的上限。 如果我们无法以可接受的性能显示此简单动画,则无需在更复杂的动画上浪费时间。

概念验证以Doppio为核心,这只是一个令人惊讶的项目。 Doppio是在浏览器中运行JavaScript中实现的JVM。 这再次证明了规则34的编码器版本:“如果您能想到的话,JavaScript中就有一个实现……”

老实说,我对这种方法非常怀疑。 这样的JVM的性能有多好? 另一方面,JavaScript近年来发展Swift,正如Hendrik Ebbers最近在开玩笑地指出的那样,如今没有比JavaScript更积极地优化了。 值得一试。 正如您在PoC(希望现在开始)中看到的那样,尤其是在第二个PoC中,运行时性能出奇地好。 再次考虑一下您正在看什么:这是一个标准的JavaFX应用程序,已编译为字节码,并且已在用JavaScript实现的JVM中进行了解释(到目前为止,AFAIK Doppio不执行JIT)。 并且使用的JavaFX运行时与标准实现几乎相同。

Doppio仅支持Java 6,但是JavaFX运行时基于Java8。Doppio团队正在努力支持Java 8,但是到目前为止,我们必须以某种方式弥合差距。 我们决定使用RetroLambda ,主要是因为Android的JavaFX端口已在使用它。 这是一个非常有用的工具,它接受兼容Java 8的字节码并将其迁移到Java 7甚至Java 6字节码。 到目前为止,它对我们而言是完美无缺的,目前还不支持默认方法。 我不确定它是否可以投入生产,但是如果您坚持使用Java 6或Java 7,是否想使用Java 8功能,并且已经进行了广泛的测试,则值得一试。

概念验证使用不同的方法在屏幕上渲染JavaFX Scene。 第一个PoC使用软件渲染器。 它是JavaFX运行时的一部分,顾名思义,几乎所有渲染场景的操作都是用Java完成的。 结果是一个字节数组,我们必须将其复制到屏幕上。 另一方面,自定义渲染器尝试使用尽可能多HTML canvas API,即,渲染圆形时,自定义渲染器使用arc()方法。 通常,第二种方法要快得多,因为它可以利用平台中的优化功能。 但这也意味着实施将受到平台可能性的限制。 例如,通常不支持带有视频的高级功能(例如旋转和叠加)以及许多效果。

接下来的步骤是至少再增加两个原型,然后我们将决定要遵循的路线。 而且我们需要确定启动时间。 敬请关注!

翻译自: https://www.javacodegeeks.com/2014/12/javafx-in-the-browser.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用代码对repeating section控件新增Item(InfoPath)

在做项目的时候,有一个场景,当用户切换不同选项时(radio button),repeating section会随着切换而变换两种状态1:删除所有item. 2.新增而且只新增一个item. 对于删除比较容易,但对于从没有任何一个item状态下&#xff0…

MDB!= JMS,反之亦然

基本 消息驱动Bean(又称为MDB)只是另一个EJB,如无状态,有状态或单例。 使用MessageDriven批注指定。 MDB用于异步消息处理 它们与无状态EJB 相似 ,因为它们都是由EJB容器池化的 但是,它们与无状态EJB不同…

4.1邮箱的全选,全不选,反选

事件&#xff1a;onclick 属性&#xff1a;checked 对于分清getElementsByTagName(元素名)里的元素名&#xff0c; 可以先提取其外面一层的元素&#xff0c;再在此基础上用getElementsByTagName(元素名) 用到for语句&#xff0c;if语句&#xff0c;length <!DOCTYPE ht…

调了 好几天的问题 treeview 的js 处理复选框之间的关系,选中子框父框自动选中,单独执行 没问题 放到框架页里 就有问题...

刚开始的js 这么写的 function OnTreeNodeChecked() {var ele event.srcElement;if (ele.type checkbox) {var childrenDivID ele.id.replace(CheckBox, Nodes);var div document.getElementById(childrenDivID);if (div ! null) {var checkBoxs div.getElementsByTagName…

1.2鼠标移入移出改变背景色和其他大小样式

功能&#xff1a;鼠标移入div,背景色变为绿色&#xff0c;宽变小&#xff0c;长变大&#xff0c;移出恢复原状 事件&#xff1a;onmouseover,onmouseout 属性&#xff1a; background,width,height <!DOCTYPE html><html><head><meta charset"utf…

JDK 9 –给圣诞老人的信?

众所周知&#xff0c;冬天&#xff08;尤其是圣诞节前的时间&#xff09;是做梦的合适时机&#xff0c;希望有一个梦想似乎可以触摸的时刻。 当孩子们和大人在纸上或在对圣诞老人的虚构或真实信件中写下自己的梦想的那一刻&#xff0c;希望他们的梦想将成为现实。 这很引人注目…

周三的工作 张孝祖

今天的任务是主面板master嘿嘿 上头有几个按钮&#xff0c;登录登出&#xff0c;个人信息&#xff0c;注册注销等&#xff0c;他们是根据用户是否等率决定的 具体代码如下 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System…

H5本地存储

在以前&#xff0c;我们想要存储一些数据&#xff0c;并且只是在前端使用&#xff0c;服务端并不会使用&#xff0c;我们只能存在cookie里&#xff0c;但是cookie会跟随请求头在客户端和服务端之间来回传递&#xff0c;而且cookie还有一些缺点&#xff0c;H5提供了webStorage的…

在哪里可以运行EJB?

EJB不仅为Java EE应用服务器而建。 他们还可以执行在的Java EE Web Profile的容器或简单的Java SE环境&#xff08;Java SE的啊- &#xff01;E&#xff01;ASY 的J ava 乙是指合同&#xff09;。 EJB Lite 仅支持完整的EJB规范提供的功能的子集所必需的-相同功能的轻量级版本…

sql查询结果字段名与字段值倒过来了

数据库为sybase, sql如下&#xff1a; 1 select substring(LRRJG,1,7) as SSQJ, 2 sum(case when RWDL_BH 01 then 1 else 0 end) AS A, 3 sum(case when RWDL_BH 01 and XBHSJG ! null then 1 else 0 end) AS B 4 from ZYH_DBRW_LRNSRRW 5 where LR_DBRW_ID ! null and DR …

Promise实战AJAX封装

一、利用Promise的知识&#xff0c;对最开始的ajax的例子进行一个简单的封装&#xff1a; var url xxx; // 封装一个get请求的方法 function request(url){return new Promise(function(resolve,reject){var XHR new XMLHttpRequest();XHR.open(GET,url,true);XHR.send();XHR…

重新设计Hamcrest

我在Hamcrest库上做了几篇文章 &#xff0c;我确实很喜欢使用它&#xff0c;但是我希望对其进行一些更改。 我了解他们做出的大多数设计决策&#xff0c;但我认为其中一些确实不值得。 介绍Litecrest 我对库所做的大多数更改都有助于减轻Hamcrest的负担&#xff0c;因为我觉得…

CSS 垂直居中

1、使用绝对定位垂直居中 绝对对位原理&#xff1a;元素在过度受限情况下&#xff0c;将margin设置为auto&#xff0c;浏览器会重算margin的值&#xff0c;过度受限指的是同时设置top/bottom与height或者left/right与width。 .absolute_center{/*display:none;*/position:absol…

Java EE拦截器

历史 我认为重要的是要看一下Java EE中的Interceptor的发展&#xff0c;因为它是从EJB特定的项目开始的&#xff0c;后来又演变成一个单独的规范&#xff0c;现在可供其他Java EE规范扩展&#xff0c;这一事实很简单。 版本1.0 拦截器最初是在EJB 3.0 &#xff08; Java EE 5的…

New Begin

已经研究生三年级了&#xff0c; 最近也找好了工作&#xff0c;应该要开始自己的程序人生了。 虽然说写程序也写了很一段时间了&#xff0c; 决定现在开始在cnblogs这个&#xff0c;记录下自己的学习轨迹。开始维护自己的blogs。转载于:https://www.cnblogs.com/binzeehale/ar…

[ExtJs6] 环境搭建及创建项目

1. 环境搭建 sencha cmd 和 extjs6 sdk.sencha cmd: https://www.sencha.com/products/extjs/cmd-download/extjs6: https://www.sencha.com/sencha cmd 安装过程将其加入系统的环境变量path中。export PATH${PATH}:/Users/shuanggai/bin/Sencha/Cmd/6.2.2.36把改语句添加到 ~/…

通过Spring Integration和RabbitMQ获得高可用性的AMQP支持的消息通道

Spring Integration消息通道默认情况下将消息存储在内存中。 这是因为内存速度快&#xff0c;易于实现&#xff0c;并且不会增加网络成本。 但是&#xff0c;在某些情况下&#xff0c;这可能会引起问题&#xff0c;因为如果应用程序崩溃或服务器意外关闭&#xff0c;所有消息都…

有机会多熟悉下开源框架

Struts2&#xff0c;Spring&#xff0c;Hibernate等开源框架的使用转载于:https://www.cnblogs.com/yqskj/archive/2012/11/05/2756085.html

vue之node.js的简单介绍

一、什么是node.js&#xff1f; 它是可以运行JavaScript的服务平台&#xff0c;可以吧它当做一门后端程序&#xff0c;只是它的开发语言是JavaScript 二、安装 1、node.js的特性&#xff1a; - 非阻塞IO模型- 时间驱动 2、运用的场景&#xff1a; - 高并发低业务- 实时场景- 聊…

Java 8 StringJoiner

在Java 8发行版中&#xff0c;最受关注的是Lamda&#xff0c;新的Date API和Nashorn Javascript引擎。 在这些阴影下&#xff0c;有较小但有趣的变化。 其中之一是StringJoiner的引入。 StringJoiner是用于分隔字符或字符串列表的实用程序。 您可能会认出以下代码&#xff1a; …