Java与.NET集成指南

在本文中,将探讨如何在Java应用程序中嵌入.NET GUI组件。这涉及到使用Java的JNI(Java Native Interface)与.NET平台进行交互。如果对面向对象的.NET JNI不熟悉,建议先阅读相关文章。本文将提供一个示例,展示如何将.NET的WPF组件嵌入到Java GUI中。

Java.NET代码集成

在之前的讨论中,介绍了Java和.NET代码集成的主要概念,并展示了一个将.NET GUI组件嵌入到Java界面的示例。如果对.NET的面向对象JNI不熟悉,建议先阅读相关文章。本文不讨论Windows Presentation Foundation (WPF)的详细内容,但提供了一个示例,展示如何将WPF组件嵌入到Java GUI中。

从Java的角度来看,任何WPF/.NET组件都是需要用Java类包装的原生代码片段。Java中有一个特殊的接口来处理WPF/.NET组件。这个接口必须包括创建组件实例和销毁实例的方法。在附带的示例代码中,将WPF时钟组件嵌入到Java GUI中。

Java代码示例:

package com.oojni; import java.awt.Canvas; public class WPFContainer extends Canvas { static { System.loadLibrary("oojni.net20"); System.loadLibrary("JavaHostWPF"); } int ref = 0; public void addNotify() { super.addNotify(); ref = create(this); } public void removeNotify() { dispose(ref); super.removeNotify(); } public void dispose() { if (ref != 0) dispose(ref); ref = 0; } void updateClock() { updateClock(ref); } native void updateClock(int ref); native int create(Object parent); native void dispose(int ref); }

这个类覆盖了两个java.awt.Canvas方法:addNotify和removeNotify。addNotify在JVM创建java.awt.Canvas实例时被调用,这是创建原生WPF/.NET组件容器的地方。removeNotify在JVM销毁java.awt.Canvas实例时被调用,在这里销毁WPF/.NET组件容器。

在.NETJNI代码中,实现了以下方法:获取Java组件的窗口句柄hWnd,创建.NET组件容器实例,并将hWnd作为Java组件的子窗口添加,填充.NET组件容器实例。

.NET代码示例:

public override int create(ObjectOrientedJNI.JObject parent) { WPFCreator creator = new WPFCreator(parent); thread = new System.Threading.Thread(new System.Threading.ThreadStart(creator.Create)); thread.SetApartmentState(System.Threading.ApartmentState.STA); thread.Start(); creator.autoEvent.WaitOne(); GlobalReference gref = new GlobalReference(creator.Control, true); return gref.Reference.ToInt32(); }

在STA线程中,调用ObjectOrientedJNIInterop.com.oojni.WPFCreator类实例的create方法,在这里创建.NET WPF容器。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485