在Delphi中通过Java Bridge使用DocumentBuilderFactory时出现分段错误

时间:2014-07-10 13:15:20

标签: java delphi java-native-interface delphi-xe5

我试图通过JNI / Java Bridge在Delphi代码中使用javax.xml.parsers.DocumentBuilderFactory。

这是我为工厂构建的界面:

  

注意:我在课堂上知道实际的创建方法是newInstance()   但是当我尝试使用newInstance而不是init时,我也会得到相同的结果   分段错误。

{DocumentBuilderFactory}
JDocumentBuilderFactoryClass = interface(JObjectClass)
['{8475A5A9-F10A-4DDA-9D50-C714C015C81C}']
    function init: JDocumentBuilderFactory; cdecl; overload;
end;

[JavaSignature('javax/xml/parsers/DocumentBuilderFactory')]
JDocumentBuilderFactory = interface(JObject)
['{7F4F2927-25EB-4B03-9373-A43B0757CD06}']
    function newDocumentBuilder: JDocumentBuilder; cdecl;
end;

TJDocumentBuilderFactory = class
     (TJavaGenericImport<JDocumentBuilderFactoryClass, JDocumentBuilderFactory>)
end;

这是调用接口/对象的代码:
tmpObject: JObject;

// init an object, i have already tried just calling create
tmpObject := TJDocumentBuilderFactory.JavaClass.init;
//then wrap it into the appropriate object
if Assigned(tmpObject) then
    builderFactory := TJDocumentBuilderFactory.Wrap
        ((tmpObject as IlocalObject).GetObjectID);

据我所知,我不必在接口中声明java类的每个方法,我已经使用了其他类没有问题。

通常,java桥引发的分段错误表明加载接口或文件时出现问题。例如,如果java签名中java类的路径错误,那么也会导致分段错误。然而,这不是这种情况,因为我可以确认路径是正确的。我环顾四周,但无法找到有关如何解决此问题的建议。有什么想法吗?

的问候,
杰森

1 个答案:

答案 0 :(得分:0)

分段错误是可以理解的,因为无法创建抽象类的实例。

Android documentation表示DocumentBuilderFactory是一个抽象类。该类提供了一个静态方法newDocumentBuilder(),它返回一个DocumentBuilder的新实例。

要创建工厂实例,请使用DocumentBuilderFactory。newInstance()。


由于我不使用移动版Delphi,我不能说如何在JNI适配器上使用静态工厂方法。如果没有记录,也许值得自己的Stackoverflow问题。