刚才忘记发启动jvm的过程了补法一下 procedure TFrmMain.LoadVM; var Errcode: Integer; VM_args: JavaVMInitArgs; Options: array[0..10] of JavaVMOption; begin try // 创建虚拟机对象,并传入jvm.DLL接口路径 FJavaVM := TJavaVM.Create(JNI_VERSION_1_6, 'jre6\bin\client\jvm.dll'); FillChar(Options, SizeOf(Options), #0); // 设置jar包或类的搜索路径,多个jar使用分号隔开 Options[0].optionString := '-Djava.class.path=.RSA.jar;Tools.jar'; // // 声明使用jdk1.6版本 VM_Args.version := JNI_VERSION_1_6; VM_Args.options := @Options; VM_Args.nOptions := 1; VM_Args.ignoreUnrecognized := False; // 加载虚拟机 ErrCode := FJavaVM.LoadVM(VM_Args); if ErrCode < 0 then begin // Loading the VM more than once will cause this error if Errcode = JNI_EEXIST then MessageDlg('Java VM has already been loaded. Only one VM can be loaded.', mtError, [mbOK], 0) else ShowMessageFmt('Error creating JavaVM, code = %d', [Errcode]); Exit; end; // Create the Env class FJNIEnv := TJNIEnv.Create(FJavaVM.Env); except on E: Exception do begin ShowMessage('Error: ' + E.Message); Exit; end; end; end;
procedure TFrmMain.LoadVM;
var
Errcode: Integer;
VM_args: JavaVMInitArgs;
Options: array[0..10] of JavaVMOption;
begin
try
// 创建虚拟机对象,并传入jvm.DLL接口路径
FJavaVM := TJavaVM.Create(JNI_VERSION_1_6, 'jre6\bin\client\jvm.dll'); FillChar(Options, SizeOf(Options), #0);
// 设置jar包或类的搜索路径,多个jar使用分号隔开
Options[0].optionString := '-Djava.class.path=.RSA.jar;Tools.jar'; // // 声明使用jdk1.6版本
VM_Args.version := JNI_VERSION_1_6;
VM_Args.options := @Options;
VM_Args.nOptions := 1;
VM_Args.ignoreUnrecognized := False; // 加载虚拟机
ErrCode := FJavaVM.LoadVM(VM_Args);
if ErrCode < 0 then
begin
// Loading the VM more than once will cause this error
if Errcode = JNI_EEXIST then
MessageDlg('Java VM has already been loaded. Only one VM can be loaded.', mtError, [mbOK], 0)
else
ShowMessageFmt('Error creating JavaVM, code = %d', [Errcode]);
Exit;
end; // Create the Env class
FJNIEnv := TJNIEnv.Create(FJavaVM.Env);
except
on E: Exception do
begin
ShowMessage('Error: ' + E.Message);
Exit;
end;
end;
end;
没有定义阿
网上最新版的只定义了 JNI_VERSION_1_4 ?