我试图通过JNI/Java在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类的路径是错误的,那么这也会导致分段错误。然而,这里的情况并非如此,因为我可以确认路径是正确的。我环顾四周,但找不到任何关于如何解决这个问题的建议。有什么想法吗?
打招呼,
杰森
发布于 2014-07-10 16:24:21
分割错误是可以理解的,因为不可能创建抽象类的实例。
Android 文档说DocumentBuilderFactory是一个抽象类。该类提供了一个静态方法newDocumentBuilder(),它返回一个DocumentBuilder的新实例。
若要创建工厂的实例,请使用DocumentBuilderFactory.newInstance。
由于我没有使用Delphi的移动版,所以我无法说明如何在JNI适配器上使用静态工厂方法。如果它没有文档化,也许它是值得自己的堆栈溢出问题。
https://stackoverflow.com/questions/24677545
复制相似问题