【问题标题】:Gephi's java default method not implemented in C# with an ikvm-from dll libraryGephi 的 java 默认方法未在 C# 中使用 ikvm-from dll 库实现
【发布时间】:2015-09-01 02:08:57
【问题描述】:

我对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));

在第二行我收到以下错误:

Exception non gérée: System.TypeLoadException: La méthode '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:我正在尝试用带有 IlSpy 的 java 1.7 上的旧版本替换我的 dll 中的 org.openide.util 包

【问题讨论】:

    标签: java c# ikvm gephi default-method


    【解决方案1】:

    我解决了。

    似乎是 Gephi 与 java 8 不兼容,所以我为 java 7 使用了 IKVM 7 版本系列(可在 nuget 获得)。

    我在 IKVM 7.2 和 7.4 之间遇到了一些问题,它想在我有 7.2 时加载 7.4。

    最后,我在 sourceforge 上使用 IKVM 7.2 制作了我的 dll(我的 Windows 环境路径指向 java 7 文件夹),并在我的 Visual Studio 项目的引用中使用了 nuget 的 IKVM 7.4。

    似乎工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-22
      • 2015-07-31
      • 1970-01-01
      • 2023-01-19
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      相关资源
      最近更新 更多