Einzelnen Beitrag anzeigen

Simon1988

Registriert seit: 12. Jul 2006
39 Beiträge
 
#63

Re: Delphi mit Java komunizieren

  Alt 26. Okt 2006, 14:56
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 ?!
  Mit Zitat antworten Zitat