2

私は Java に関する知識がほとんどないため、問題を誤解している可能性があります。

私は Java の Gephi API に取り組んでおり、IKVMC を使用して dll を操作しました。

Gephi doc https://github.com/gephi/gephi/wiki/How-to-manipulate-Graphで説明されているように、空のグラフを作成しようとしました

C#で私はこれを試しました:

ProjectController pc;
            pc = (ProjectController)org.openide.util.Lookup.getDefault().lookup(typeof(ProjectController));

2 行目に次のエラーが表示されます。

Exception non gérée : System.TypeLoadException: La method 'thenComparing' du type 'org.openide.util.lookup.ALPairComparator' de l'assembly 'gephi-toolkit, Version=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(Template ) à org.openide.util.lookup.AbstractLookup.lookupItem(Template template) à 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 ライブラリへの参照があります。

したがって、デフォルト メソッドの実装が ikvm を使用して C# で適切にサポートされていないか、thenComparing がタイプ internal ALPairComparator を適切にサポートしていないことが問題である可能性があります。

それがどこから来たのかはよくわからないので、手がかりがあれば歓迎します。質問がある場合、またはさらに精度が必要な場合は、私に尋ねてください。

ご協力ありがとうございました。

編集: Gephi は Java 1.8 と互換性がなく、Java 1.7 と互換性があることに気付きました

EDIT2: dll 内の org.openide.util パッケージを、IlSpy を使用する Java 1.7 の以前のバージョンに置き換えようとしています。

4

1 に答える 1

2

私はそれを解決しました。

Java 8と互換性のないGephiのようですので、Java 7用のIKVM 7バージョンのセリエを使用しました(nugetで入手可能)。

IKVM 7.2 と 7.4 の間にいくつか問題があり、7.2 を持っているときに 7.4 をロードしようとしました。

最後に、IKVM 7.2 を使用して dll を sourceforge で使用できるようにし (Java 7 フォルダーへの Windows 環境パスを使用)、Visual Studio プロジェクトの参照で nuget の IKVM 7.4 を使用しました。

正常に動作しているようです。

于 2015-06-17T09:06:22.333 に答える