我对java的了解很少,所以我可能误解了我的问题:
我正在研究 Java 中的 Gephi API,我使用 IKVMC 来处理 dll。
我尝试按照 Gephi 文档https://github.com/gephi/gephi/wiki/How-to-manipulate-Graph中的说明创建一个空图
在 C# 中我试过这个:
ProjectController pc;
pc = (ProjectController)org.openide.util.Lookup.getDefault().lookup(typeof(ProjectController));
在第二行,我收到以下错误:
异常非 gérée : System.TypeLoadException: La 方法 'thenComparing' du ty pe 'org.openide.util.lookup.ALPairComparator' de l'assembly 'gephi-toolkit, Vers ion=0.0.0.0, Culture=neutral, PublicKeyToken=null 'n'a pas d'implémentation。à org.openide.util.lookup.AbstractLookup.getPairsAsLHS() à org.openide.util.lookup.MetaInfServicesLookup.beforeLookup(模板)à org.openide.util.lookup.AbstractLookup.lookupItem(模板模板)à org.openide。 util.lookup.AbstractLookup.lookup(Class clazz) à org.openide.util.Lookup.getDefault() à myproject ....
用英语它很快就说 thenComparing() 方法没有实现 org.openide.util.lookup.ALPairComparator 类型。
我做了一些研究,在反编译的 dll 中,错误似乎在这里
internal LinkedHashSet getPairsAsLHS()
{
AbstractLookup.Storage storage = this.enterStorage();
LinkedHashSet result;
try
{
Enumeration enumeration = storage.lookup(ClassLiteral<Object>.Value);
TreeSet.__<clinit>();
TreeSet treeSet = new TreeSet(ALPairComparator.DEFAULT);
我发现 thenComparing 是一个“默认”方法,在 java 8 中,如果我没有说错,默认方法已经实现。
我的项目参考了 IKVM 的 java.util 库。
所以也许这是一个问题,在 C# 中使用 ikvm 严重支持默认方法的实现,或者 thenComparing 严重支持内部 ALPairComparator 类型。
真诚地,我不太清楚它可能来自哪里,所以任何线索都会受到欢迎。如果您有任何问题或需要更精确的信息,请问我。
谢谢您的帮助。
编辑:我注意到 Gephi 与 java 1.8 不兼容,但与 java 1.7 不兼容
EDIT2:我正在尝试将我的 dll 中的 org.openide.util 包替换为带有 IlSpy 的 java 1.7 上的旧版本