我尝试使用com4j来获取Catia文件的PartDocument但是当我得到对象时它是一个Document对象而不是PartDocument对象。因此,我无法访问我的对象的方法“部分”。我尝试将Document转换为PartDocument但系统达到了强制转换异常。 我尝试过使用java 7 x86或64并最终获得相同的结果。
java -jar tlbimp.jar -o E:\testcatia\src -p catia InfTypeLib.tlb
java -jar tlbimp.jar -o E:\testcatia\src -p catia SMTypeLib.tlb
java -jar tlbimp.jar -o E:\testcatia\src -p catia PartTypeLib.tlb
java -jar tlbimp.jar -o E:\testcatia\src -p catia CATIAAppTypeLib.tlb
com4j已经构建了类,我们有:Document和PartDocument(PartDocument扩展文档)
我的程序代码
Application app = COM4J.createInstance( catia.Application.class, "CATIA.Application" );
Documents docs=app.documents();
PartDocument partdoc = (PartDocument) docs.open(new Holder<>("E:\\test.CATPart"));
Part part= partdoc.part();
exception:com.sun.proxy。$ Proxy9无法强制转换为catia.PartDocument
之前是否有人遇到过此类问题,如果有的话,我会非常感谢解决方案。
我已经尝试过JACOB API并且它正在运行。 Document有一个正确的PartDocument实例,但代码太难操作
`ActiveXComponent app =new ActiveXComponent("CATIA.Application");
app.setProperty("Visible", new Variant(true));
Dispatch oDocuments = app.getProperty("Documents").toDispatch();
Dispatch oDocument = Dispatch.call(oDocuments, "Open", "E:\\test.CATPart").toDispatch();
Dispatch oPart = Dispatch.get(oDocument,"Part").toDispatch();
Dispatch oBody = Dispatch.get(oPart,"MainBody").toDispatch();`
答案 0 :(得分:0)
您必须使用QueryInterface(https://com4j.java.net/runtime-semantics.html)
Document doc = docs.open(new Holder<>("E:\\test.CATPart"));
PartDocument part = doc.queryInterface( PartDocument.class);