浅谈Java和JavaFX之间的互操作性
创始人
2024-03-21 01:51:00
0

从JavaFX官方博客上读了一篇文章,是讨论从Java代码中调用JavaFX类的方法。现在的情况是,JavaFX可以调用Java的类,基本没有什么限制,而反过来,Java却不可以随便调用JavaFX的类。这点可以从JavaFX项目的编译过程看出原因。以NetBeans为例,Build的过程是先编译Java代码(javac),然后才是JavaFX代码(javafxc),这样一来,Java代码不知道有JavaFX类,而JavaFX类却可以”看见”Java类。搜索一下我们可以发现,很多程序员都在寻找各种从Java中调用JavaFX类的方法。有一篇有趣的(英文)文章是介绍如何通过反向工程来分析JavaFX类的结构。就连那篇JavaFX官网上的文章,也采用了非标准的API来实现这一目的,而且也”保证”这种方法肯定会在下一版本中失效。

那么我们到底需不需要Java和JavaFX之间的这种互操作性呢?我觉得这种互操作性是很有必要的。如果两者可以近似于可以混用的程度,从长远上看,JavaFX可以有更大的生命力。试想一下运用MVC的设计模式(Model-View-Controller),我们可以用Java和JavaFX结合在一起开发应用:用Java来写”M”和”C”两部分,用JavaFX来写”V”部分,这将是非常有趣的一件事情。

目前,有几种”标准”的方法来从Java调用JavaFX。

1. 使用ScirptEngineManager类,的文章提到,我们可以这样做:

package calc;
import java.io.InputStreamReader;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class CalculatorLauncher {
public static void main(String[] args) {
try {
ScriptEngineManager manager=new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByExtension("fx");
InputStreamReader reader = new InputStreamReader (CalculatorLauncher.cla
ss.getResourceAsStream("Calculator.fx")); engine.eval(reader); } catch (ScriptException ex) { } } }

但是,这种方法其实没有多大意义,因为它就是象System.exec(”calc”)那样做个系统调用而已。我觉得还不如用System.exec(”JavaFX Calculator.fx”)更加直接一些。

2. 采用Java Reflection来解析JavaFX的bytecode,得到各个method或属性,然后进行各种调用。原理上这是可行的。但是由于reflection非常复杂,使得实用性大打折扣,同时,代码也没有什么可读性了。

3. 第三种方法是定义一个Java的interface,然后在JavaFX中实现这个 interface。例如:

public interface JavaInterface { ... }

在MyJavaFXClass.fx中, 可以这样写:

public class MyJavaFXClass extends JavaInterface
{ ... }

在Java代码中,只需按照interface来调用JavaFX对象即可。这种方法可以解决大部分互操作性的问题。唯一的麻烦就是必需定义一大堆interface,但是这是我目前位置发现的一种最好的解决形式。

JavaFX现在是刚发布的第一版,所以我们无需对它苛求太多了。不过我还是希望JavaFX的设计者在下一版本中认真考虑这个问题。

【编辑推荐】

  1. JavaFX能否实现Sun的桌面端梦想
  2. Sun高管透露JavaFX开源计划 移动平台明年发布
  3. 开发者对JavaFX信心不足 缘自两大障碍

相关内容

热门资讯

施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...
VMware vFabric (2012年5月17日中国北京)——全球虚拟化和云基础架构厂商VMware公司(NYSE:VMW)今...
由浅入深学习CentOS入门 在系统的学习CentOS入门的知识中,我们掌握了一些基本的设置。今天我们来讲一下CentOS入门中的...
虚拟现实 人工智能和人体未来会... 探讨像虚拟现实和人工智能这样的技术将会跟人体发生怎样的融合。未来将会出现模糊虚拟现实和现实本身界限的...