解决方案 »

  1.   

    刚才忘记发启动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;
      

  2.   

    请问楼主使用的jni.pas是什么版本, 俺的  JNI_VERSION_1_6
    没有定义阿 
    网上最新版的只定义了  JNI_VERSION_1_4 ?