Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#48

Re: Delphi mit Java komunizieren

  Alt 6. Sep 2006, 11:38
Ich muss da noch mal nachhaken. Ich bin jetzt erstmal auf Delphi umgestiegen, damit ich irgendwie weiterkomme.

Mein Java-Programm sieht so aus:
Code:
public class HelloWorld {
    public static void main(String[] argv) throws Exception
    {
       HelloWorld test = new HelloWorld();
       int res = test.Test();
       
       System.in.read();
       
       System.out.print(res);
    }
   
    public int Test()
    {
       System.out.print("Hello, world\n");
       return 42;
    }
}
Jetzt will ich die Methode Test aufrufen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Jvm := TJvm.create('..\..\JavaDemo');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  cls : JClass;
  mid : JMethodID;
  result : JInt;
  instance : JObject;
begin
  cls := self.jvm.JniEnv.FindClass('HelloWorld');
  Assert(Assigned(cls), 'Class HelloWorld not found');

  mid := self.jvm.JniEnv.GetMethodID(cls, '<init>', '()V');
  Assert(Assigned(mid), 'Constructor not found');

  instance := self.jvm.JniEnv.NewObject(cls, mid, []);
  mid := self.jvm.JniEnv.GetMethodID(cls, 'Test', '(I)I');
  Assert(Assigned(mid), 'Method "Test" not found');
  
  result := self.jvm.JniEnv.CallIntMethod(instance, mid, [10]);
  ShowMessage('Result = ' + IntToStr(result));
end;
Aber er findet die Methode Test nicht. Was mache ich da falsch?

OK, habe es gefunden. Die Signatur hat nicht gestimmt. So muss es aussehen:
mid := self.jvm.JniEnv.GetMethodID(cls, 'Test', '()I');
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat