首页 > 编程语言 >delphi调用Java类

delphi调用Java类

时间:2024-07-26 10:56:57浏览次数:12  
标签:begin 调用 Java delphi args VM end com

1、jdk的安装:https://www.cnblogs.com/ljk2008/p/18324820。
2、jvm.dll:如果提示找不到JVM.dll需要在classpath、path中分别添加jvm.dll的路径。
3、用到三方库:https://github.com/aleroot/DelphiJNI.git。
4、JAVA类(CLASS、JAR)要放置在对应的文件夹内,如:package com.com1.com2;对应的目录应该是com\com1\com2
5、如java类中用的包中引用有其他jdk以外包,也应该对应放置到相应的目录
6、测试代码,以下内容来自:https://blog.csdn.net/dbyoung/article/details/89085406,感谢作者[email protected]
现在很多SDK都提供了JAVA接口。但是没有Delphi接口。
没有办法只好曲线救国。我们可以通过 JNI 的方式在 Delphi10.3 中调用 Java 的函数。
第一步:创建 Java 虚拟机和运行环境
procedure TForm1.FormCreate(Sender: TObject);
var
Options: array [0 .. 4] of JavaVMOption;
VM_args: JavaVMInitArgs;
ErrCode: Integer;
begin
{ 创建 Java 虚拟机 }
FJavaVM := TJavaVM.Create(JNI_VERSION_1_8);
Options[0].optionString := PAnsiChar(AnsiString('-Djava.class.path=' + ExtractFilePath(ParamStr(0)) + 'classes'));
VM_args.version := JNI_VERSION_1_8;
VM_args.Options := @Options;
VM_args.nOptions := 1;
VM_args.ignoreUnrecognized := True;
ErrCode := FJavaVM.LoadVM(VM_args);
if ErrCode < 0 then
begin
MessageBox(Handle, 'Create Java VM Error', 'Delphi 10.3 调用 Java Class', MB_OK OR MB_ICONERROR);
Halt;
Exit;
end;

{ 创建 Java 虚拟机运行环境 }
FJavaEnv := TJNIEnv.Create(FJavaVM.Env);
if FJavaEnv = nil then
begin
MessageBox(Handle, 'Create Java Env Error', 'Delphi 10.3 调用 Java Class', MB_OK OR MB_ICONERROR);
Exit;
end;
end;
第二步:执行 Java 函数
procedure TForm1.btn1Click(Sender: TObject);
var
jcls : JClass;
strClass : UTF8String;
strMetod : UTF8String;
strSign : UTF8String;
strArg, strResult: string;
begin
{ 查询 Java 类名 }
strClass := 'com/test/javafordelphi/JavaClassForDelphiTest';
jcls := FJavaEnv.FindClass(strClass);
if jcls = nil then
begin
ShowMessage('cant find java class');
Exit;
end;
{ Java 函数名称、参数类型、参数 }
strMetod := 'goTest'; // 函数名称
strSign := 'String (String)'; // 参数类型,返回值类型
strArg := '123'; // 输入参数
{ 执行 Java 函数 }
strResult := CallMethod(FJavaEnv, jcls, strMetod, strSign, [strArg], True);
if strResult <> '' then
begin
MessageBox(Handle, PChar(Format('JavaClassForDelphiTest.goTest Result: %s', [strResult])), 'Delphi 10.3 调用 Java Class', MB_OK OR MB_ICONINFORMATION);
end;
end;
第三步:销毁虚拟机
procedure TForm1.FormDestroy(Sender: TObject);
begin
FJavaEnv.Free;
FJavaVM.DestroyJavaVM;
FJavaVM.Free;
end;
添加 JNI, JNIUtils 单元引用。
添加两个成员变量:
private
FJavaVM : TJavaVM;
FJavaEnv: TJNIEnv;
编译通过。
不要着急运行。先确认一下你是否安装了JAVA,并且系统搜索路径中是否包含 Java 的路径。
默认是(x86):
C:\Program Files (x86)\Java\jdk1.8.0_202\bin
C:\Program Files (x86)\Java\jdk1.8.0_202\jre\bin\server
如果没有,将它们添加到 Windows 系统搜索路径中(环境变量:Path)。
执行。
效果图1

效果图2

完整代码,包含 jni 源代码代码,和2个DEMO源代码,可以从这里下载:
https://download.csdn.net/download/dbyoung/11096704
开发语言:
Delphi10.3
开发作者:
[email protected]
QQ群:101611228
开发时间:
2019-04-06

标签:begin,调用,Java,delphi,args,VM,end,com
From: https://www.cnblogs.com/ljk2008/p/18324878

相关文章

  • OpenFeign报错:Caused by: java.lang.IllegalStateException: Method has too many Bod
    近两天在开发进行若依二开,openfeign需要一个微服务调用另一个微服务。等service层注入远程bean后,报错Causedby:java.lang.IllegalStateException:MethodhastoomanyBodyparameters:publicabstractvoidcom.shop.user.remote.RemoteUmsMemberAddressService.export(j......
  • Java NIO框架Netty教程(四)- ChannelBuffer
    在字符串消息收发中提到。ChannelBuffer是Netty中非常重要的概念。所有消息的收发都依赖于这个Buffer。我们通过Netty的官方的文档来了解一下,基于流的消息传递机制。Inastream-basedtransportsuchasTCP/IP,receiveddataisstoredintoasocketreceivebuffer.Unf......
  • Java NIO框架Netty教程(六)-Java NIO Selector模式
    全文详见个人独立博客:JavaNIO框架Netty教程(六)-JavaNIOSelector模式JavaNIO框架Netty教程(六)-JavaNIOSelector模式看到标题,您可能觉得,这跟Netty有什么关系呢?确实,如果你完全是使用Netty的,那么可能你可以完全不需要了解Selector。但是,不得不提的是,Netty底层关于NIO的实......
  • delphi android发送与接收广播
    在Delphi中,可以使用TLocalBroadcastManager类来发送和接收广播。以下是一个示例:发送广播:```delphiuses Androidapi.JNI.GraphicsContentViewText,Androidapi.Helpers,Androidapi.JNI.JavaTypes,Androidapi.JNI.LocalBroadcastManager;procedureSendBroadcast(constAAction:......
  • 使用pybind11封装c++的dll,供python调用
    用pip安装好pybind11 文件清单,都写在一个目录里//文件名:add.cppextern"C"doubleadd(doublein1,doublein2){returnin1+in2;}//文件名:sub.cppextern"C"doublesub(doublein1,doublein2){returnin1-in2;}//文件名:mul.cppextern"......
  • (Javaweb)Vue
    目录一.Vue概述二Vue指令三.vue生命周期一.Vue概述1.model--数据模型:包含了很多的业务数据以及数据的处理方法2.view--视图层--数据的展示--DOM元素3.viewmodel--完成数据绑定的核心,实现model与viewmodel之间的数据连接其中,MVVM由三部分组成,model,view,viewmodelm......
  • (Javaweb)js
    目录一.js介绍二.引入方式三.js基础语法1.书写语法2.js变量3.数据类型运算符流程控制语句 四.js函数五.js对象六.js对象--Array数组七js对象--String字符串八.js对象--JSON九.js对象--BOM十.js对象--DOMDOM案例一.js介绍脚本语言:代码不需要进行编译,直......
  • JavaScript 基础
    JavaScript简介JavaScript是一种具有函数优先原则的轻量级、解释型、即时编译型的编程语言。函数优先原则:函数可以和其他任何变量一样对待,而且函数的优先级会被提升。.轻量级:语法和Java类似,语法简单易学。解释型:代码在运行时直接由解释器逐行解释和执行,而不需要事先将......
  • Java毕业设计-基于springboot开发的ONLY在线商城系统设计与开发-代码-毕业论文(附毕设
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、用户信息管理2、商品分类管理3、商品信息管理4、轮播图管理四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的ONLY在线商......
  • Java毕业设计-基于springboot开发的在线课程管理系统-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、管理员模块的实现1.1教师信息管理1.2学生信息管理1.3在线课程管理1.4班级分类管理2、教师模块的实现2.1在线课程信息2.2教学计划管理2.......