0

JavaPNS を使用して、自宅のコンピューターからリモート プッシュ通知 (iOS) を送信しています。証明書の準備方法に関するraywenderlich.comの手順に従った後、.p12 ファイルを取得し、以下に記述されたコードに配置しました。

  import javapns.Push;
  import javapns.notification.Payload;
  import javapns.notification.PushedNotifications;

  import org.apache.log4j.*;

  public class Main{
        public static void main(String[] args) {
              Push.alert("Hello World!", "PushChatKey.p12", "pushchat", false, "Token");
        }

  }

上記のコードにはデバイス トークンを含めていませんが、実際のプログラムのトークン番号がデバイスの正しいものであることは 100% 確信しています。プログラムを実行すると、(Eclipse) コンソールに次のエラーが表示されます。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at javapns.notification.Payload.<clinit>(Payload.java:25)
    at javapns.Push.alert(Push.java:47)
    at Main.check(Main.java:86)
    at Main.main(Main.java:115)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 4 more

私の .p12 ファイルは Java プロジェクト フォルダー内にあり、以前に寄せられた他の質問を確認して、プログラム内に org.apache インポート ステートメントを配置しました。

このような質問に対して私が見た他の回答は、次の行を含む try-catch ステートメントを使用することです: BasicConfigurator.configure();

これを配置すると、Eclipse から「BasicConfigurator を解決できません」と表示され、自分でクラスを作成するオプションが表示されます。

何が間違っているのかわかりません。どんな助けでも大歓迎です。回答者全員に事前に感謝します。

4

1 に答える 1

0

これは、javapns が依存関係 log4j を使用して情報をログに記録しており、実行時にそれを見つけることができないためです。

Javapns wiki のドキュメントには、次のように記載されています

ログの有効化 ライブラリのログ

javapns は、ロギングに Log4J を使用します。ログをすばやく有効にするには、次のコードを追加します。

 import org.apache.log4j.*;

コードで javapns を使用する前に:

try {

    BasicConfigurator.configure();

 } catch (Exception e) {  }

すでに log4j を使用している場合は、次の行を log4j.properties ファイルに追加して、javapns のロギングを有効にすることができます。

log4j.logger.javapns=debug

Java SSL ロギング 証明書または SSL の問題をトラブルシューティングするには、Java VM 引数に以下を追加します。

-Djavax.net.debug=all

Maven を使用している場合は、この依存関係を実際の依存関係に追加します。

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

Maven を使用していない場合は、.jar をダウンロードしてプロジェクトのライブラリに追加してください。

私の側では、他のライブラリの1つがクラッシュするため、依存関係にlog4jを追加できません。私は実際に javapns の log4j を無効にする方法を探しています。

編集: log4j を依存関係に追加し、 BasicConfigurator.configure(); を追加することになりました。私のジャージの ResourceConfig クラスに。他のライブラリでlog4jを使用しているときにおそらくこの部分が欠けていたので、今では問題なく動作します。

于 2015-08-06T08:57:15.060 に答える