0

Java アプリケーションの実行に問題があります。Applet Activator クラスで GUI を開くと、OSGi で検索した後、bundleContext.getServiceReference が NPE をスローします。UIService を実装するサービスが登録されていないために発生することがわかりました。私の質問は次のとおりです。それはどういう意味ですか? 修正するには何を確認すればよいですか?

エラーコード:

java.lang.NullPointerException
at net.java.sip.communicator.impl.appletActivator.AppletActivator.openMainGui(AppletActivator.java:57)
at net.java.sip.communicator.impl.appletActivator.AppletActivator.start(AppletActivator.java:40)
at org.apache.felix.framework.util.SecureAction$Actions.run(SecureAction.java:1243)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:620)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1904)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1822)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1192)
at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:266)
at java.lang.Thread.run(Unknown Source)

ソース:

public static <T> T getService(BundleContext bundleContext,
        Class<T> serviceClass) {
            //This throws the NullPointerException
    ServiceReference serviceReference = bundleContext 
            .getServiceReference(serviceClass.getName());

    return (serviceReference == null) ? null : (T) bundleContext
            .getService(serviceReference);
}

私は OSGi を初めて使用し、いくつかの概念を理解していません。

4

1 に答える 1

1

UIService を登録するフレームワークにバンドルがインストールされていますか? また、あなたのコードは、OSGi では禁止されている開始順序に依存しているように見えます。getService メソッドを呼び出してサービスを返すことを期待すると、サービスを登録するバンドルが (a) 既に開始されており、(b) サービスが登録されていると想定されます。これが、通常、OSGi アプリケーションで DS または ServiceTrackers を使用して、バンドルの開始順序を分離する理由です。

于 2013-10-28T12:25:43.133 に答える