1、上一篇创建虚拟机的代码加参数备注
var
Options: array [0 .. 4] of JavaVMOption;
VM_args: JavaVMInitArgs;
ErrCode: Integer;
begin
{ 创建 Java 虚拟机 }
FJavaVM := TJavaVM.Create(JNI_VERSION_1_8);
//这个选项设置 Java 类路径,指定 JVM 应该在哪里查找用户定义的类文件。您可以将其设置为包含您的 Java 类的目录
Options[0].optionString := PAnsiChar(AnsiString('-Djava.class.path=' + ExtractFilePath(ParamStr(0)) + 'classes'));
//JNI version java接口的版本号
VM_args.version := JNI_VERSION_1_8;
//给虚拟机参数赋值
VM_args.Options := @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;
2、一段c++中调用jvm的代码注释
include <jni.h>
include <stdio.h>
int main() {
JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine)
JNIEnv *env; // Pointer to native interface
JavaVMInitArgs vm_args; // Initialization arguments
JavaVMOption options[4]; // JVM options
// Set the JVM options
options[0].optionString = "-Djava.compiler=NONE"; // Disable JIT
options[1].optionString = "-Djava.class.path=c:\\myclasses"; // User classes
options[2].optionString = "-Djava.library.path=c:\\mylibs"; // Native library path
options[3].optionString = "-verbose:jni"; // Print JNI-related messages
vm_args.version = JNI_VERSION_1_2; // JNI version
vm_args.options = options; // Options
vm_args.nOptions = 4; // Number of options
vm_args.ignoreUnrecognized = JNI_TRUE; // Ignore unrecognized options
// Create the JVM
jint ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (ret != JNI_OK) {
fprintf(stderr, "Failed to create JVM\n");
return 1; // Exit with error
}
// Your JNI code here
// Destroy the JVM
jvm->DestroyJavaVM();
return 0; // Exit successfully
}
①代码说明
JNI_CreateJavaVM: 这是创建 Java 虚拟机的函数。如果成功,它将返回 JNI_OK,否则返回一个错误代码。
jvm->DestroyJavaVM(): 在完成所有 JNI 操作后,记得调用此函数来销毁 JVM。
②注意事项
确保您已正确设置 Java 环境变量,并且指定的路径是正确的。
如果您在 Windows 上运行此代码,确保使用双反斜杠 \ 来分隔路径。
适当处理 JNI 调用的错误和异常,以确保程序的健壮性。
③选项解释
-Djava.compiler=NONE:
这个选项禁用 JIT(即时编译器)。在某些情况下,您可能希望禁用 JIT 编译,以便更容易调试或分析 Java 代码的执行。
-Djava.class.path=c:\myclasses:
这个选项设置 Java 类路径,指定 JVM 应该在哪里查找用户定义的类文件。您可以将其设置为包含您的 Java 类的目录。
-Djava.library.path=c:\mylibs:
这个选项设置 JNI 的本地库路径,指向包含本地共享库(如 DLL 文件)的目录。JNI 代码通常会调用这些本地库。
-verbose:jni:
这个选项启用 JNI 相关的详细输出,帮助调试和跟踪 JNI 调用过程。