我试图通过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类的路径错误,那么也会导致分段错误。然而,这不是这种情况,因为我可以确认路径是正确的。我环顾四周,但无法找到有关如何解决此问题的建议。有什么想法吗?
的问候,
杰森
答案 0 :(得分:0)
分段错误是可以理解的,因为无法创建抽象类的实例。
Android documentation表示DocumentBuilderFactory是一个抽象类。该类提供了一个静态方法newDocumentBuilder(),它返回一个DocumentBuilder的新实例。
要创建工厂实例,请使用DocumentBuilderFactory。newInstance()。
由于我不使用移动版Delphi,我不能说如何在JNI适配器上使用静态工厂方法。如果没有记录,也许值得自己的Stackoverflow问题。