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');