.Net调用Java的实现方法

 

一. IKVM

1.1下载配置IKVM

1.1.1. 下载路径

1.1.2. 设置路径

解压ikvm-0.42.0.3.zip,并将%IKVM_HOME%/bin添加到path中。此处的%IKVM_HOME%是指解压后ikvm的主目录。

 

1.2第一种方式:直接将.class文件转化成.dll

网站介绍

在Dos界面中输入命令,转到ikvm.exe应用程序的目录下;

同时将要转化的.class文件(例如testmain.class文件)放到目录下,在dos里输入以下命令:

ikvmc<空格>–target:library<空格>testmain.class

可在C:\Program Files\ikvm\bin目录下查看生成的.dll文件

 

链接介绍节目如下:

1.3第二种方式:将Java的项目的jar包转化成.dll

c#直接调用java代码,需要ikvmbin-0.44.0.5.zip

1. 下载并解压

2. 配置环境变量:

在path中添加%IKVM_HOME%\bin,IKVM_HOME为解压后的IKVM的主目录。在dos界面,输入"ikvm"命令,测试是否配置成功

3. 编写java代码(java代码,要放在指定的package下,不要放在默认包下):

 1 package com.xyy.csharp;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class TestMain {
 7 
 8     //获得集合
 9     public List<Demo1> getLists(){
10         List<Demo1> lst=new ArrayList<Demo1>();
11         Demo1 d=new Demo1();
12         d.setId(1);
13         d.setName("admin");
14         Demo1 d2=new Demo1();
15         d2.setId(2);
16         d2.setName("sa");
17         
18         lst.add(d);
19         lst.add(d2);
20         return lst;
21     }
22     
23     //获得字符串
24     public String getString(){
25         return "我是字符串";
26     }
27     
28     //获得对象
29     public Demo1 getObject(){
30         Demo1 demo=new Demo1();
31         demo.setId(1);
32         demo.setName("admin");
33         return demo;
34     }
35     
36     //获得boolean
37     public boolean getBoolean(){
38         return Boolean.TRUE;
39     }
40     
41     //在控制台输出
42     public void SystemOutPrint(){
43         System.out.println("我是控制台输出语句");
44     }
45 }

5. 将java项目打成jar包(test.jar),打包过程详见备注:
6. 在Dos界面中输入命令,CD表示改变当前目录,转到ikvm.exe应用程序的目录下;

同时将要转化的.jar文件(例如ikvm.jar文件)放到目录下,输入命令,将ikvm.jar文件转换成zhou.dll文件:

 

Ikvm命令格式:ikvmc<空格>-out:aaa.dll<空格>bbb.jar

其中:bbb.jar表示要转化的.jar文件,aaa.dll表示要生成的.dll文件名。

7. 新建c#项目,引入以下三个dll:

%IKVM_HOME%\bin\IKVM.OpenJDK.Core.dll

%IKVM_HOME%\bin\IKVM.Runtime.dll

%IKVM_HOME%\bin\IKVM.Runtime.JNI.dll

引入刚刚打包的IKVM.dll 

8.

9. 输出结果:

10. c#不能直接接收java返回的集合,这里就没深入研究了

备注:将JAVA项目打包成jar包过程

java项目打jar包分为2种情况:

一、java项目没有导入第三方jar包

1. 首先在Eclipse中打开项目, 右键点击项目,选择“Export”;
2. 选择Java/JAR file,Next;
3. Select the resources to export中可以选择你想要包含的项目文件夹,一些不必要的文件夹就无需放进去了,免得增大空间;
这里有几个选项:
 * Export generated class files and resources 表示只导出生成的.class文件和其他资源文件
 * Export all output folders for checked projects 表示导出选中项目的所有文件夹
 * Export java source file and resouces 表示导出的jar包中将包含你的源代码*.java,如果你不想泄漏源代码,那么就不要选这项了
 * Export refactorings for checked projects 把一些重构的信息文件也包含进去


在Select the export destination中选择导出的jar的路径,Next
4. 下一页可以选择是否导出那些含有警告warning或者错误errors的*.class文件。一般不用理他,Next
5. 下一个页面里可以对项目做一些配置。(如果项目没有引入第三方jar包,这项我们采用系统默认的选项就OK,Main class一定要设置成为你项目的那个主方法入口类)
 * Generate the manifest file 是系统帮我们自动生成MANIFEST.MF文件,如果你的项目没有引用其他class-path,那可以选择这一项。
 * Use existing mainfest from workspace 这是可以选择我们自定义的.MF文件,格式如上所写。
 * Seal content 要封装整个jar或者指定的包packet
 * Main class 这里可以选择你的程序入口,将来打包出来的jar就是你这个入口类的执行结果。
最后Finish,搞定。 ......

二、 java项目有导入第三方Jar包(例如项目中有导入sqlserver2005.jar包)

这时候打包就相对复杂一点:

前面的4步和上面的情况是一样,只是第5步需要选择Use existing mainfest from workspace选项,并选择你自己创建的一个MANIFEST. MF文件,因为系统默认选择的是Generate the manifest file选项,而该选项不会将项目用到得第三方jar包打入到java项目生成的jar包中去。

自定义配置文件MANIFEST.MF :

首先在项目的根目录下创建一个MANIFEST.MF文件

接下来用记事本打开该文件,并编辑:

例如:
Manifest-Version: 1.0
Main-Class: StudentManager_Test
Class-Path: sqlserver2005.jar
其中的Manifest-Version是指程序的版本号,Main-Class是指程序的主方法入口类,slass-Path就指定了外来jar包的位置。请注意假设我们的项目打包后为project.jar,那么按照上面的定义,应该在 project.jar的同层目录下有相关的jar包(即sqlserver2005.jar,如果有引入多个第三方jar包,则可以用空格隔开)放在里面。否则将会出现Exception in thread "main" java.lang.NoClassDefFoundError的错误。

二. Web Service

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。