Passar parâmetros para um applet executado via JNI

2 respostas
K

Olá.

Sou novo em java e estou tentando executar um applet java em uma aplicação Delphi, através do JNI.

Eu já utilizei esse applet normalmente em uma página web, e ele precisa de um parametro: idCliente, que na página eu passo através da tag:

<param name="idCliente" value="XXXXXX">

Mas rodando esse applet no Delphi, com o JNI, eu não faço idéia de como passar esse parâmetro. Consegui carregar o applet com sucesso e localizei a classe e a função que desejo utilizar. A função tem o protótipo:

public String geraResumoDoCliente() {}

… o único problema é saber como passar o parâmetro pro applet. Se fosse um parâmetro de função seria moleza, mas como foi visto, a função que desejo utilizar não pede nada, obviamente ela obtém o idCliente internamente, através da função getParameter do java.

O código que utilizo pra iniciar a VM é o seguinte:

var
  Options: array [0..10] of JavaVMOption;
  VM_args: JavaVMInitArgs;
begin
  FillChar(Options, SizeOf(Options), #0);
  Options[0].optionString := PChar('-Djava.class.path=D:\Server\UClientes.jar');
  VM_args.version  := JNI_VERSION_1_2;
  VM_args.options  := @Options;
  VM_args.nOptions := 1;

  FJavaVM := TJavaVM.Create;
  if FJavaVM.LoadVM(VM_args) = 0 then
  begin
    FJNIEnv := TJNIEnv.Create(FJavaVM.Env);
  end;
end;

Funciona perfeitamente. Depois uso outro procedimento pra localizar a classe e a função que quero utilizar:

var
  Cls: JClass;
  Obj: JObject;
  MID: JMethodID;
  Resumo: JString;
begin
  Obj := CreateJavaObject(FJNIEnv, 'utils/tools/ClientManager', Cls); // 'ClientManager' é a classe
  if Obj <> nil then
  begin
    Mid := FJNIEnv.GetMethodID(Cls, 'geraResumoDoCliente', '()Ljava/lang/String;'); // 'geraResumoDoCliente' é a função
    if Mid <> nil then
      Resumo := FJNIEnv.CallObjectMethod(Obj, Mid, []);
  end;
end;

Também funciona, mas a função não retorna nada por falta do parâmetro idCliente.

Alguma sugestão? :?

2 Respostas

B

se vc está usando delphi, pode tentar utilizar activex para o seu applet se comunicar com a dll. A forma mais simples de se fazer isso que conheço é através da bilioteca JACOB.

K

Não existe DLL, esse procedimento é diferente… não é o java que está importanto uma biblioteca externa, como normalmente se faz… no meu caso é a aplicação delphi que está rodando o applet java, usando a JNI.

Criado 1 de agosto de 2008
Ultima resposta 1 de ago. de 2008
Respostas 2
Participantes 2