`
javafxguy
  • 浏览: 151479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

JavaFX和Java之间的互操作性

阅读更多

从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");
// (JavaFXGuy http://javafxguy.iteye.com/ )
 InputStreamReader reader = new InputStreamReader
 (CalculatorLauncher.class.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中, 可以这样写:

(JavaFXGuy http://javafxguy.iteye.com/ )
public class MyJavaFXClass extends JavaInterface
{ ... }


在java代码中,只需按照interface来调用JavaFX对象即可。这种方法可以解决大部分互操作性的问题。唯一的麻烦就是必需定义一大堆interface,但是这是我目前位置发现的一种最好的解决形式。 (JavaFXGuy http://javafxguy.iteye.com/ )
JavaFX现在是刚发布的第一版,所以我们无需对它苛求太多了。不过我还是希望javaFX的设计者在下一版本中认真考虑这个问题。

 

2
0
分享到:
评论

相关推荐

    javaFX Demo 模板案例

    `javafx.beans`和`javafx.properties`包提供了属性和观察者机制,使得UI和数据模型之间的同步变得简单。在示例中,我们可能看到如何设置数据绑定,实现动态更新的界面。 此外,JavaFX支持CSS样式,使得应用的外观和...

    TPfx_javaFx_java_tpfx_

    JavaFX是基于Java语言的,因此具备Java的所有优点,如跨平台性、强大的类库和优秀的性能。 【JavaFX与Java的关系】 JavaFX是Java生态系统的一部分,它是Java SE(标准版)的一个扩展,为开发者提供了一个用于构建...

    java 用javafx+ffmepg+百度语音合成,视频剪切工具

    总的来说,这个“java 用javafx+ffmepg+百度语音合成,视频剪切工具”是一个综合性的多媒体处理应用,集成了多种技术,包括JavaFX GUI设计、FFmpeg的视频处理、以及百度的语音合成服务。它为用户提供了便捷的视频...

    java1.8版本,jre,jfx

    Java 8引入了Lambda表达式,这是一种简洁的匿名函数表示方式,可以用于简化处理函数接口和集合的操作。Lambda表达式使得函数式编程风格在Java中变得可行,这对于处理并发和大数据流非常有用。另一个重大改进是方法...

    Java程序开发基于SpringBoot和JavaFx

    将Spring Boot与JavaFX结合,可以在后台利用Spring Boot的强大功能处理业务逻辑和数据管理,如数据库操作、RESTful API调用等,而在前台通过JavaFX展示动态、直观的用户界面。这样的组合可以实现前后端分离,提高...

    JavaFX:Java的现代UI革命

    与Java本身的跨平台特性一致,JavaFX同样支持在Windows、macOS和Linux等主流操作系统上运行,同时还能够被部署到移动设备上,极大地扩展了其应用场景。 5. **模块化架构** JavaFX采用了模块化的设计理念,这意味...

    JavaFX山寨QQ2016

    5. **跨平台**:作为Java的一部分,JavaFX可以运行在多种操作系统上,包括Windows、Mac OS X和Linux,这使得"JavaFX山寨QQ2016"具备良好的跨平台兼容性。 6. **FXML**:FXML是一种标记语言,用于描述JavaFX界面的...

    基于javafx和fxml的超市管理系统源码.zip

    【标题】基于JavaFX和FXML的超市管理系统源码是一个完整的Java应用程序开发示例,它展示了如何使用这两种技术来构建一个交互式的用户界面和后台管理功能。JavaFX是Oracle提供的一个用于创建桌面应用的现代图形用户...

    javaFX不同窗口之间进行调用以及进行通信的实现办法

    JavaFX是一种用于构建桌面、移动和嵌入式系统的富客户端应用程序的Java库。它提供了丰富的图形用户界面(GUI)组件和强大的2D/3D渲染能力。在开发JavaFX应用时,有时我们需要在不同的窗口之间进行交互和通信,这对于...

    JavaFX2.0 体系结构和框架

    - **语言集成**:支持与其他动态语言(如JRuby、Groovy和JavaScript)的互操作,便于网络开发者迁移。 - **脚本语言支持**:通过绑定和高性能约束,提供与JavaFX脚本相似的语言体验。 - **扩展Java集合库**:引入...

    openjdk8 with javafx

    JavaFX提供了丰富的UI控件、2D和3D图形支持、媒体处理能力以及跨平台兼容性,使得开发者能够创建功能强大的桌面应用程序,同时也可以通过JavaFX Web Start或打包成独立的应用程序在Web上部署。 在提供的压缩文件...

    javafx实现好看的界面

    7. **跨平台兼容性**:JavaFX应用程序可以在多种操作系统上运行,包括Windows、Mac OS X和Linux,因为它们都是基于Java平台的。 8. **JavaFX Scene Builder**:这是一个可视化工具,可以帮助开发者快速构建和布局...

    javafx 11 jar包,亲测可用

    - `javafx.swing.jar`:用于JavaFX与Swing的互操作。 - `javafx-swt.jar`:如果需要在JavaFX中使用一些SWT特定的功能,此库提供了集成接口。 5. **纯Java开发**: - JavaFX 11完全基于Java语言,这意味着它可以...

    javaFx 完整版项目(Spring+SpringMVC+Mybatis)

    总结来说,"javaFx 完整版项目(Spring+SpringMVC+Mybatis)"是一个综合性的ERP解决方案,利用JavaFX的强大GUI功能和SSM框架的高效企业级开发能力,实现了从用户交互到后台数据处理的完整流程,提供了一个功能强大且...

    基于Java、JavaFX开发的下载工具.zip

    5. **多线程**:JavaFX支持在GUI应用中优雅地处理多线程问题,确保用户界面的流畅性,而下载任务可以在后台线程中执行,不影响用户操作。 6. **Swing集成**:如果需要,JavaFX可以与传统的Java Swing组件无缝集成,...

    java8和javafxAPI

    Java 8 和 JavaFX API 是两个重要的开发工具,它们为Java开发者提供了丰富的功能和界面设计支持。本压缩包包含的 "Java8 API.chm" 和 "JavaFX_API.chm" 文件,是离线版的Java 8开发手册和JavaFX API文档,允许开发者...

    java_jre15已集成JavaFX16

    4. **跨平台支持**:JavaFX 16保持其跨平台兼容性,可以在Windows、macOS和Linux等操作系统上运行。 5. **API变更和增强**:可能包含了一些API的改进,以提高开发者生产力,例如增加新方法或改进现有方法。 6. **...

    JavaFX API文档

    当前的JavaFX包括JavaFX脚本和JavaFX Mobile(一种运营于行动装置的操作系统),今后JavaFX将包括更多的产品。JavaFX Script编程语言(以下称为JavaFX)是一种declarative, statically typed(声明性的、静态类型)...

    java javafx实现记事本.rar

    通过阅读和分析这些代码,你可以更深入地了解如何将JavaFX与Java编程语言结合,实现一个功能完备的记事本应用。 总的来说,这个JavaFX记事本项目展示了如何使用JavaFX的组件和API来构建桌面应用。通过这个项目,...

    java小迷宫 基于JavaFX的迷宫小游戏 Java 、Eclipse 、JavaFX

    JavaFX是Oracle提供的一个用于构建桌面应用、移动应用和嵌入式系统的强大工具,它支持丰富的2D和3D图形效果,以及多媒体功能,使得开发者可以创建出具有现代感和交互性的应用程序。 JavaFX通过Java语言编写,它提供...

Global site tag (gtag.js) - Google Analytics