JNBridge 3.1: 在.NET 和 Winforms 中嵌入 Java SWT/Swing

  • Floyd Marinescu
  • 高昂

2007 年 5 月 8 日

话题:Java.NET语言 & 开发架构

JNBridge 3.1 于近期发布,这是一款为 Java 和.NET 互操作实现建立桥梁的工具。JNBridge 提供了使得 Java 或.NET 代码运行在 Java 虚拟机或.NET 通用语言运行时 CLR 之上的跨平台机制,甚至可以实现不同平台语言之间的内存共享。在 JNBridge 的帮助之下,外来代码就可以作为本地语言的对象来编译和运行。JNBridge 3.1 版本提供了 Java AWT/SWT 以及 Swing 组件嵌入在 Windows 窗体和.NET 窗体控件中的功能,另外一项重要的功能改进是实现 Java 代码在.NET CLR 环境下运行时的.NET 本地代码调用,甚至在集群环境下,跨语言平台的代码调用同样也可以实现。

InfoQ 在对 JNBridge 公司的 CTO Wayne Citrin 先生的采访中,针对如何将 Java 界面组件嵌入在.NET 程序之中(.NET 程序嵌入在 Java 中的逆过程遵循类似的操作步骤),了解到更多的相关内容:

在.NET 代码中,我们通过创建.NET 的代理类,来表示 Java 的图形用户接口类。代理类的调用将直接得到相应的 Java 对象,在新的 JNBridge 3.1 版本里面,我们已经创建了专门的封装类,来封装面向 Java 组件的代理类,用法与.NET 的 Windows 窗体控制方式相似,即封装类继承自 WinForms 的 UserControl 类。这样一来,Java 组件就可以在任何需要 WinForms 组件的地方使用。封装类的继承是实现互操作的关键要素,在 Java 类中可以得到 Win32 窗体句柄,并在 WinForms 应用中对其进行管理和操作,将使得 Java 组件成为 WinForms 组件的子节点。这样,当 WinForms 窗体移动或最小化的时候,嵌入的 Java 组件也会随之进行移动或最小化操作。

当提到为什么会有开发者愿意使用交叉技术来实现跨语言的用户界面组件混合时,Wayne 针对一些用例解释道:

通常说来,如果开发者打算在 Java 富客户端程序中嵌入 WinForms 组件,整个程序需要在 Windows 环境下编译运行。决定是否要在 Java 富客户端程序中嵌入 WinForms 的组件,往往取决于开发者使用的工具和开发环境。许多 WinForms 组件与 Windows 底层的运行环境有着紧密的联系,举个例子来说,WinForms 的 DataGrid 控件与 SQL Server 的数据源具有一定的集成关系。如果 Windows 环境下的开发者拥有这样的集成控件,并同时需要使用类似于 IBM WebSphere Everywhere Deployment 这样基于 Java 的富客户端应用,这将会使得在 Java 富客户端中嵌入 WinForms 控件的工作变得十分有意义。

通过 JNBridge 不仅可以在 WinForms 中嵌入 Swing 组件,还可以集成开发者自定义的 Swing 组件,因为常有一些用户开发自定义的控件,或是用户购买了第三方的其他控件。在此之前,那些控件只能在纯 Java 的富客户端环境下使用,这意味着,如果开发者由于更喜欢 WinForms 的编程模型或编程工具,而期望将 Java 程序移植到 WinForms 的环境下,他们不得不丧失在 Java 控件方面已有的投资,或者重新回到移植之前的状态来保持 Java 控件方面的投资不受损失。现在,通过 JNBridge 提供的功能,开发者可以在保留他们认为有价值的 Java 控件同时,将程序移植到 WinForms 的环境之下。

提供 Java 组件的软件供应商们现在也可以通过 JNBridge 的用户界面嵌入功能,针对.NET 和 Java 来生成跨平台的界面组件。在基于.NET 的控件市场成熟之后,.NET 组件供应商们同样可以使用 JNBridge 提供的功能,将开发好的.NET 组件提供给使用 Java 的客户。

在程序运行方面,JNBridge 需要有 JDK 1.3.1 及其后版本和 NET 1.0 及其后版本的支持。正如 Ted Neward 在文章Java 与.NET 如何集成在一起中描述的那样,JNBridge 作为跨平台互操作机制的高效实现方式,为 Java 与.NET 的集成与互操作,提供了诸多可行的解决方案。感兴趣这个主题的读者,可以在 InfoQ 中文站点的Java 与.NET 集成专题中,了解到更多 Java 与.NET 集成方面的相关技术。

查看英文原文:JNBridge 3.1: Embed SWT/Swing in .NET and Winforms in Java
译者简介:高昂,IEEE-CS、CCF 会员,关注开源软件发展与进步,Java GIS 开源项目 uDIG 参与者。目前在资源与环境信息系统国家重点实验室从事网格 GIS、空间数据库研究工作。个人站点为开源网格 GIS 试验田。与 InfoQ 中文站分享内容,请邮件至china-editorial@infoq.com
Java.NET语言 & 开发架构