so hier nochmal mit Quelltext :
als erstes wird ein Objekt der JavaKlasse ShapeVectorDatasource erzeugt ..
dann will ich einen VectorLayer erzeugen. Der Konstuktor (wie man ja auch sieht) brauch aber nicht einen ShapeVectorblablub, sonder einen VectorDataSource (eben die unterklasse) ..
und da kommt dass das objekt von der Klasse VectorLayer leer ist .. warum auch immer ..
Delphi-Quellcode:
constructor JDShapeFileVector.create(Path :PAnsiChar) ;
Var JPath : JString;
begin
cls := jvm.JniEnv.FindClass('
com/gdv/mapbuilder/datasources/shapefile/ShapefileVectorDataSource');
if cls =
nil then
begin
ShowMessage('
Klasse "ShapefileVectorDataSource" nicht gefunden');
exit;
end;
ConstructorMid := jvm.JniEnv.GetMethodID(
cls, '
<init>', '
(Ljava/lang/String;)V') ;
if constructorMid =
nil then
begin
ShowMessage('
Konstruktor nicht gefunden') ;
exit ;
end;
JPath := Jvm.JniEnv.StringToJString(Path) ;
Obj := jvm.JniEnv.NewObject(
cls, ConstructorMid,[JPath]);
if Obj =
nil then
ShowMessage('
Fehler beim erzeugen der Instanz');
VectorLayer := JDVEctorLayer.create(Obj);
end;
{*create ShapeVector}
destructor JDShapeFileVector.destroy ;
begin
Vectorlayer.destroy ;
end;
constructor JDVectorLayer.create(ShapeFile : JObject);
begin
cls := jvm.JniEnv.FindClass('
com/gdv/mapbuilder/layer/MBVectorLayer');
if cls =
nil then
begin
ShowMessage('
Klasse "MBVectorLayer" nicht gefunden');
exit;
end;
ConstructorMid := jvm.JniEnv.GetMethodID(
cls, '
<init>', '
(Lcom/gdv/mapbuilder/datasources/VectorDataSource;)V');
if constructorMid =
nil then
begin
ShowMessage('
Konstruktor nicht gefunden') ;
exit ;
end;
Obj := jvm.JniEnv.NewObject(
cls, ConstructorMid,[ShapeFile]);
//ShapeFile ist hier eben vom Objekt ShapefileVectorbla und nicht von der verlangten unterklasse VectorDataSource
if Obj =
nil then
ShowMessage('
Fehler beim erzeugen der Instanz: VectorLayer');
end;
es kommt keine Meldung außer 'Fehler beim erzeugen der Instanz: VectorLayer'
kann es jetzt sein dass das Obj der Klasse Vector leyer trotzdem erzeugt wurde ?!