文章目录
- 背景
- 环境
- 过程
- 初尝试
- 步骤
- 结果
- 原因
- 再尝试:升级ikvm
- 步骤
- 结果
- 原因
- 再再尝试:降级jdk
- 步骤
- 结果
- 最后
下面是某小白的瞎逼逼,不具备任何参考价值
背景
最近一直在做的语音识别系统开始收尾,客户端服务端功能已经做好(Java),客户端界面也搭建好(C#),最后一步把界面和功能捆绑就万事大吉了!
当初在考虑用VS2012的WFC做界面时,大致搜了一下,确保C#是有办法使用Java类的,于是就大胆地走到了现在。
结果!让Java类可被C#使用的操作过程令人抓狂……这里就记录一下我这两天走的弯路……
环境
涉及的环境、工具、软件有
- Java version 11.0.1
- Eclipse Java 2019-03
- C# .NET Framework4
- Visual Studio 2012
- ikvm-7.2.4630.5
搜索了一下,貌似最普遍的方法就是用ikvm把java工程生成的jar包转换成动态链接库然后供C#调用,如果还有别的什么方法希望大神提出……
过程
初尝试
步骤
- 按照shirayner在Java之 将程序打包成jar包的方法将java项目打包
- 按照Edluminary在使用IKVM将jar包转成dll文件在Net项目中引用的方法下载、配置ikvm然后引入到vs工程中使用
结果
C#程序中识别不出jar包对应的动态链接库。
在搜索问题所在,发现在使用ikvmc -out:tar.dll ori.jar
时出现了warning
(转换过程不允许出现任何的error或warning,不然即使生成dll文件也为空文件)
ikvm warning: Not a class file, including it as resource
原因
ikvm版本与jre版本不匹配。因此尝试升级ikvm版本或降级jdk版本重编译打包大概能解决问题。
再尝试:升级ikvm
步骤
- 下载最新版本(大概?)ikvm8.1并解压
- 配置环境变量,path添加ikvm8.1的bin路径
- 确认配置成功
ikvm -version
- 重新将jar包转化为动态链接库
ikvmc -out:des.dll ori.jar
结果
fatal error IKVMC5031: Bootstrap classes missing and core assembly not found
原因
暂时没找到……
再再尝试:降级jdk
步骤
- 下载JDK SE7
- 配置环境变量
- 重新编译
…
结果
……忘了项目中用了很多java8以后的东西……
最后
我不禁陷入了沉思……当初为什么会享用VS MFC来做界面呢?!大概因为Java我只会简单使用AWT或Swing,(默认)又丑,(代码添加组件)又麻烦……那么为什么Java有没有一个类似于MFC的东西呢……
JFC!!!
好的 最后我选择放弃将Java向C#靠拢了……
然后 我开启了新世界的大门。根据 CoderYYN的Eclipse下SWT的安装与使用设置好环境,我又要开始瞎折腾了。