javafx 浏览器_浏览器中的JavaFX

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近年来发展很快,正如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

javafx 浏览器

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

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

相关文章

django写mysql轮询_django 多数据库及分库实现方式

定义及路由机制定义在settings里面的DATABASES是一个字典,用于定义需要的数据库,如下,一共定义了两个数据库。DATABASES {default: {NAME: app_data,ENGINE: django.db.backends.postgresql_psycopg2,USER: postgres_user,PASSWORD: s3krit}…

python换行不执行_PYTHON无法换行问题,求指点

PYTHON无法换行问题,百思不得其解。fp.write(u{a}\n.format(a\n.join(a)))改成fp.write(u{a}\n.format(a,.join(a)))“,”可以正常显示下附源码,请指点一二#!/usr/bin/env python# encodingutf-8from bs4 import BeautifulSoupimp…

javafx 示例_JavaFX列表示例

javafx 示例这是使用JavaFX构建的示例列表应用程序。 该应用程序是待办事项列表。 该应用程序具有添加,更新和删除列表中项目的功能。 列表数据存储在HSQLDB关系数据库中。 该应用程序使用JDBC(Java数据库连接)API访问数据库。 该应用程序打包…

嵌入式C语言的7个硬核知识

1void 与 void*void表示的是无类型,不可以采用这个类型声明变量或常量,但是可以把指针定义为void类型,如void* ptr。void指针可以指向任意类型的数据,可用任意数据类型的指针对void指针赋值,比如int *ptrInt&#xff1…

python离线安装第三方库whl_详细说明如何在pycharm不联网的情况下,离线安装第三方库及依赖包(如sklearn)...

1、安装目标库1、首先,选择你要导入的库文件,如seaborn库下载网站:https://pypi.org/或https://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy2、在下载路径下空白处,按住Shift鼠标右键,选择在此处打开命令窗口执行安装命…

java 手机网站 cookie操作_java操作cookie问题

做的一个ssh项目,其中需要使用cookie来辅助记录用户页面访问量。可是我在使用的时候出现问题,就是我设置了有效期,但是关闭浏览器后或者重新打开另一个浏览器均不能获取到设置的coo...做的一个ssh项目,其中需要使用cookie来辅助记…

C语言指针用得好犹如神助!这些使用技巧值得收藏

指针用的好犹如神助,用不好会让你叫苦连连,但大多数人是用不好指针的,所以后来的很多语言都把指针封装,屏蔽。比如JAVA,java是没有指针的,但是很多地方都用到指针,不过不对用户开放,…

wso2_使用WSO2开发

wso2几个月以来,我又开始使用WSO2产品。 在接下来的文章中,我描述了我遇到的一些(小)问题以及如何解决它们。 设置开发环境时,我要做的第一件事是在Mac上下载Developer Studi o(64位版本)。 解…

python数据获取手段包括哪些_python开发应用-本地数据获取方法

文件的打开、读写和关闭文件的打开:file_objopen(filename,moder,buffering-1,...)filename是强制参数mode是可选参数,默认值是rbuffering是可选参数,默认值为-1(0代表不缓冲,1或大于1的值表示缓冲一行或指定缓冲区大小)f1open(e:…

有意思的C语言运算符

在C语言中,运算符用于执行程序代码运算,会针对两个或者两个以上操作数进行运算。比如:5 - 2,它的操作数是 5 和 2,而运算符则是 “-”。常见的运算符可大致分为 4 种类型:算术运算符、关系运算符、赋值运算…

java反向映射_opencv 直方图和直方图反向映射

histogram使用np进行直方图像素统计通过histogram对图像的三个通道分别进行一维直方图统计,由于被统计的数组必须是一维的,所以使用ravel将二维数组转换为一维数组,通过range参数指定统计区间为0--256,bin参数指定将统计区间分为2…

hamcrest_重新设计Hamcrest

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

程序员鄙视链python_关于程序员之间的鄙视链

鄙视像条食物链,是个绕不开的怪圈。在这个怪圈中,每一个人,都在链条的最末端。朋友圈有鄙视链,相亲有鄙视链,程序员圈也有鄙视链看完下面的鄙视链,你是那一层?↓↓↓↓【1】努力成为全栈&#x…

java自定义jsp标签_自定义JSP标签

1 写一个标签处理类//标签处理类public class IpTag implements SimpleTag {private PageContext pageContext;//Web容器调用NO1public void setJspContext(JspContext pc) {System.out.println("setJspContext()");pageContext (PageContext) pc;}//Web容器调用NO2…

新手学习C语言编程的8个致命错误,你中招了吗?

序言C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”。但由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不…

java与java ee_Java EE拦截器

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

python怎么查询元素是否在列表中_python怎么判断某一元素是否在列表中

定义一个列表,并判断元素是否在列表中。python学习网,大量的免费python基础教程,欢迎在线学习!例如:test_list [ 1, 6, 3, 5, 3, 4 ]print("查看 4 是否在列表中 ( 使用循环 ) : ")for i in test_list:if(i…

python中带附件发送电子邮件_python发送带附件邮件

Python SMTP发送邮件SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。Python创建 SMTP 对象…

jpa 实体图查询_JPA实体图

jpa 实体图查询JPA 2.1的最新功能之一是可以使用实体图指定获取计划。 这很有用,因为它允许您自定义使用查询或查找操作检索的数据。 在使用中大型应用程序时,通常以不同的方式显示来自同一实体的数据。 在其他情况下,您只想选择最小的信息集…

C语言程序控制语句——while

while语句while (表达式) 语句当表达式为非0值(真)时,执行while循环体中的语句,如此往复,直到表达式的值等于0(假),循环结束。如以下示例程序,循环…