`
javafxguy
  • 浏览: 149317 次
  • 性别: 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 API文档

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

    index.chm javaFX api document

    JavaFX 包含了一些列图形和媒体包,允许程序员设计、创建、测试、调试、和部署富客户端应用并且保持跨平台的操作一致性。 JavaFX 应用程序由 Java API 编写,可以调用任何 Java API 包。例如,可以调用 Java API ...

    javafx使用指南-目录版.pdf

    JavaFX 是一个基于 Java 语言的软件平台,用于开发桌面应用程序、移动应用程序和网络应用程序。它提供了一个统一的编程模型,可以跨平台运行,具有高清晰度的图形用户界面和多媒体支持。 JavaFX 的主要特点包括: ...

    Java GUI 学习课程

    无论你选择使用Swing还是JavaFX,Java提供了可视化的开发工具(如NetBeans和Eclipse)和丰富的文档和教程,以帮助你快速上手GUI开发。你可以使用拖拽和放置的方式设计界面,然后通过编写Java代码来实现事件处理和...

    JNotepad(Java Notepad) 是一款简约而强大的跨平台文本编辑器

    JNotepad使用Java语言编写,并基于JavaFX框架开发,具有良好的可扩展性和稳定性。 功能介绍 文本编辑和查看:JNotepad提供了完善的文本编辑和查看功能,使你能够轻松创建、编辑和浏览各种类型的文本文件。 跨平台...

    基于JAVA医药管理系统的毕业设计,该系统将采用JAVA语言进行开发,使用MySQL作为数据库 用户界面将采用JavaFX

    用户界面将采用JavaFX技术实现,以提供用户友好的操作体验。同时,该系统将采用MVC架构,以确保系统的可扩展性和易维护性。 本毕设旨在提供一个高效的医药管理系统,帮助企业提高其管理效率,降低成本,并提高其...

    JavaFX实现学生成绩管理系统(可运行)(综合实践大作业)

    本项目使用Java作为主要的编程语言,以IntelliJ IDEA作为本项目的软件开发工具,使用JavaFX技术实现本项目相关功能界面的实现,并运用了FXML文件对功能界面进行了布局处理。本项目使用JDBC进行数据库的连接,在...

    Java-GUI-设计与实现.pptx.pptx

    Java GUI编程基础概述 Java GUI编程基础是Java编程语言中的重要组成部分,它提供了丰富的工具和接口...Java GUI事件处理机制是实现交互性的关键,通过监听和响应用户的操作,可以实现界面的动态更新和功能的逻辑处理。

    基于java语言开发的图形设计、图像绘制信息管理系统的毕业设计实现.zip

    为了实现这一目标,我采用了 Java 技术栈中的多种工具,包括 Java Swing、JavaFX 和 Java 2D 等。这些工具不仅提供了丰富的图形和界面组件,还具有出色的性能和可扩展性,可以帮助用户实现各种复杂的图形和图像处理...

    Java毕业设计-java班级管理系统(论文+系统).rar

    * 采用Java Swing或JavaFX技术实现了美观的图形用户界面。 * 实现了用户登录、班级信息管理、学生信息管理、教师信息管理等功能模块。 * 支持数据的增删改查操作,并提供了数据备份与恢复功能。 * 系统具有良好的...

    JAVA开源量化交易程序开发框架源代码

    (Kotlin语言对Java语言和类库兼容性良好,且对于空指针更为安全) web管理服务被移除。(安全增强,技术堆栈精简) 启动服务器可通过参数决定是否同时启动管理GUI,GUI由JavaFX实现。(易用性增强) web交易页面被...

    java课堂笔记总.docx

    集合框架: 学习使用Java提供的集合框架来管理和操作数据集合,如数组、列表、集合和映射等。 多线程编程: 学习如何创建和管理多线程应用程序,以充分利用多核处理器的性能。 图形用户界面(GUI): 学习使用图形...

    Java在GIS领域学习资料大纲

    Java提供丰富的图形界面工具包,如Swing和JavaFX,使GIS应用程序能够实现直观且用户友好一种跨的界面。这有助于用户更轻松地浏览、查询和分析地理数据,提高用户体验和操作效率。 3. 开发工具和框架支持 Java拥有...

    Java课程设计大作业,包含面板设计,接口设计,各种功能植入

    接口设计:创建Java接口来定义系统的各个模块之间的接口,可以使用抽象类或接口来实现多态性。 功能植入:根据需求实现各种功能,可以使用面向对象的编程思想,将功能封装成类和方法。 数据库操作:如果需要存储和...

    Java毕业设计-JAVA+SQL电子通讯录带系统托盘(论文+源代码).rar

    数据库方面,选择了SQL作为数据存储方案,确保了数据的稳定性和可扩展性。此外,系统还集成了JavaFX技术来实现图形用户界面,以及Java的SystemTray类来实现系统托盘功能。 项目的主要功能包括: 1. 用户注册与登录...

    基于Java的视频会议系统的实现.rar

    记录系统运行日志,包括错误日志、操作日志等,方便进行故障排查和系统性能分析。 通过以上设计与实现,基于Java的视频会议系统能够为用户提供稳定、安全和高效的远程协作和沟通平台,满足用户的视频会议需求。

    基于Java CS远程监控系统软件的实现(源码+使用文档)

    网络通信:使用Java的网络API实现客户端与服务器之间的通信。 图形用户界面:客户端使用Swing或JavaFX构建用户界面。 数据库:使用MySQL、PostgreSQL等数据库存储监控数据和日志。 安全框架:集成Java安全框架,提供...

    Java 11 / JDK 11 下载

    320: Remove the Java EE and CORBA Modules(移除 Java EE 和 CORBA 模块,JavaFX 也已被移除) 321: HTTP Client (Standard) 323: Local-Variable Syntax for Lambda Parameters(用于 Lambda 参数的局部变量语法...

    Java客户信息管理系统

    实现Java客户信息管理系统可以使用各种技术和框架,如JavaFX、Swing、Spring、Hibernate等,具体选择取决于项目需求和开发团队的技术栈。同时,还需要设计良好的数据库结构和逻辑,确保数据的完整性和安全性。

    基于JAVA实现的CS远程监控系统软件

    客户端服务端架构: 使用Socket编程实现客户端和服务端之间的通信和数据传输。 图形界面设计: 使用Swing或JavaFX等图形界面库设计用户友好的监控界面。 屏幕抓取技术: 使用Java图像处理库实现将远程计算机屏幕内容...

Global site tag (gtag.js) - Google Analytics