他に何私は、新しいJavaモジュールシステムを使用してサービス・プロバイダーをロードするために欠けているのですか?

pupeno:

私は追加しているmodule-info.javaにSをIkonliのパッケージと、私は彼らのサービスクラスとのトラブルに実行していますよ。ikonli-core呼ばれるインタフェースを定義しますIkonHandlerikonli-fontawesome5-pack持っているサービスプロバイダのためにIkonHandler呼ばれるがFontAwesomeSolidIkonHandlerこれらのサービスprodiversはで使用されているikonli-javafxIkonResolver

この考えると、私はこれらのモジュール定義を作成しました:

module org.kordamp.ikonli.core {
    exports org.kordamp.ikonli;
}

module org.kordamp.ikonli.javafx {
    exports org.kordamp.ikonli.javafx;
    uses org.kordamp.ikonli.IkonHandler;
    requires javafx.graphics;
    requires org.kordamp.ikonli.core;
}

module org.kordamp.ikonli.fontawesome5 {
    exports org.kordamp.ikonli.fontawesome5;
    provides org.kordamp.ikonli.IkonHandler with org.kordamp.ikonli.fontawesome5.FontAwesomeBrandsIkonHandler, org.kordamp.ikonli.fontawesome5.FontAwesomeRegularIkonHandler, org.kordamp.ikonli.fontawesome5.FontAwesomeSolidIkonHandler;
    requires org.kordamp.ikonli.core;
    requires org.kordamp.jipsy;
}

彼らは、完全ではないかもしれませんが、私のアプリケーションが起動したときに、それがこのエラーで失敗したように、彼らは完全に十分です。

java.lang.UnsupportedOperationException: Cannot resolve 'fas-user'

これは何のハンドラがために管理しないときスローでアイコンをロードします

public IkonHandler resolveIkonHandler(String value) {
    requireNonNull(value, "Ikon description must not be null");
    for (IkonHandler handler : HANDLERS) {
        if (handler.supports(value)) {
            return handler;
        }
    }
    throw new UnsupportedOperationException("Cannot resolve '" + value + "'");
}

起こっている理由は、つまりHANDLERS空です。HANDLERSされ、このコードによって、起動時にロードされました

    ClassLoader classLoader = IkonResolver.class.getClassLoader();
    ServiceLoader<IkonHandler> loader = ServiceLoader.load(IkonHandler.class, classLoader);
    for (IkonHandler handler : loader) {
        HANDLERS.add(handler);
        handler.setFont(Font.loadFont(classLoader.getResource(handler.getFontResourcePath()).toExternalForm(), 16));
    } 

しかし、上記引用されたモジュール定義で、ServiceLoader.load(IkonHandler.class, classLoader)何のサービスプロバイダーを見つけていません。

私は何をしないのですか?

pupeno:

私が必要として行方不明になった何fontawesome5module-info.java自分のアプリケーションの:

requires org.kordamp.ikonli.fontawesome5;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=221621&siteId=1