2024年1月18日发(作者:)

JNBridge在java和.net跨平台交互中的

使用(刘明,2012-10-2)

1:JNbridge简介

JNBridge实现java和.net交互的原理是将java的jar文件转换为可供.net调用的dll文件,然后在.net平台中可直接调用。

JNBridge下载地址:。

2:实际操作

JAXP不需要填写

准备工作:(配置)在网站注册信息(很简单),Paul Sommer会给你的邮箱发来邮件,给注册码(一个月的试用),如下,将第一行的JNBridgePro复制到那里就好。

当出现下面四行英文,说明Key是有效的,可以使用。

JNBridgePro v6.1 (.NET 2.0/3.0/3.5-targeted) trial

Copyright © 2001-2012, JNBridge, LLC. All rights reserved.

There are 32 days left in your trial license.

License location: D:Program Files (x86)JNBridgeJNBridgePro v6.1

打开JNB之后,出现如下界面,关闭即可。

2.1:将java类导出成jar文件

右键点击需要导出的java类文件,选择export,选择java——JAR file,点击next,

选择保存路径,输入jar名称,点击finish,jar文件就被成功导出到指定位置了

2.2:使用JNB Proxy工具将生产的jar文件转换成dll文件

(JNB Proxy工具分为.NET 2.0-3.0-3.5-targeted,.NET 4.0-targeted还有32位平台和64位平台4种版本,根据自身系统状况进行选择)

打开JNB Proxy工具,选择Create new .Net -> Java project,点击OK

选择Project—>

点击,找到需要转换成dll文件的jar文件,添加进来。如果使用了或者也就需要将他们一并添加进去。

添加好后点击OK,然后选择Project —> Add Classes from

找到要转换成dll文件的jar文件,即上一步Classpath中的jar文件(要转换的jar文件必须在Classpath中配置完成后再添加),然后将Environment中的包全部选中,然后点击中间的Add+

待Add+操作结束后,选中Project —>

键入生成出的dll文件的名称,点击保存

等待几分钟,就可生成dll文件了。

2.3:生成的dll文件在.net中的使用

打开vs,右击项目中的“引用”,选中添加引用,把上一步中生成的dll文件添加进来

还需要将JNBridge安装路径下的和添加进来

接下来配置工程的配置文件 ,以framework2.0为例

路径根据自身机器环境进行配置。

2.4:其他操作

解压之前导出的jar包,将其中包含类文件(com文件夹)添加到该.net工程下的Java文件夹下,这样才能调用到java中的类。

将JNBridge安装路径下的rlm932_(64位机器为rlm932_)复制到项目文件夹的bin—>Debug和obj—>Debug中(此文件为授权文件,不添加项目无法运行)(可以先将rlm932_、、、 、、添

加到bin/Debug下,再将rlm932_添加到obj/x86/Debug下,然后添加引用时就可以直接从bin/Debug导入,从而节约了时间)

2.5:将java的swing控件嵌入winform中

2.6:一个例子

Java代码:

package com;

import ;

import yout;

import ;

import ;

import ox;

import rk;

public class GetANode {

public TNetwork getNetWork(){

TDataBox box = new TDataBox();

Node node1 = new Node();

ation(100,100);

ment(node1);

Node node2 = new Node();

ation(300,300);

ment(node2);

Link link = new Link(node1,node2);

ment(link);

TNetwork nw = new TNetwork(box);

return nw;

}

public static GridLayout getGridlayout(){

return new GridLayout();

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

GetANode gan = new GetANode();

TNetwork network = Work();

JFrame jf = new JFrame();

e(800, 600);

}

(network);

ible(true);

aultCloseOperation(_ON_CLOSE);

}

C#代码:

using System;

using c;

using entModel;

using ;

using g;

using ;

using ;

using com;

using ing;

using k;

using ;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

//private iner components = null;

private JavaControl jc;

//private javaHolder;

private iner components = null;

private panel1;

public Form1()

{

InitializeComponent();

orIllegalCrossThreadCalls = false;

TNetwork tw = new GetANode().getNetWork();

JPanel jp = new JPanel(dlayout());

(tw);

jc = new JavaControl(jp, 400,400);

(jc);

}

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))

{

e();

}

e(disposing);

}

#region Windows 窗ä¡ã体¬?设¦¨¨计?器¡Â生¦¨²成¨¦的Ì?代䨲码?

///

/// 设¦¨¨计?器¡Â支¡ì持?所¨´需¨¨的Ì?方¤?法¤¡§ - 不?要°a

/// 使º1用®?代䨲码?编À¨¤辑-器¡Â修T改?此ä?方¤?法¤¡§的Ì?内¨²容¨Y。¡ê

///

private void InitializeComponent()

{

1 = new ();

dLayout();

//

// panel1

//

= ;

on = new (0, 0);

= "panel1";

= new (685, 324);

ex = 0;

// += new

ventHandler(1_Paint);

//

// Form1

//

aleDimensions = new (6F, 12F);

aleMode = ;

Size = new (685, 324);

(1);

= "Form1";

= "Form1";

// += new andler(1_Load);

Layout(false);

}

#endregion

}

}

遇到的一些问题:

VS2010有时候不能识别文件,所以需要将它移到D:Program FilesJava

x32jdk1.7.0_07jrelibext(即java拓展包里面,这样才可以访问到)

我做的东西:(图片采用绝对路径,相对路径没有试)