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 并将其添加到项目的库中。

就我而言,我只是无法将 log4j 添加到我的依赖项中,因为它会使我的其他库之一崩溃。我实际上正在寻找一种为 javapns 禁用 log4j 的方法。

编辑:我最终将 log4j 添加到我的依赖项并添加 BasicConfigurator.configure(); 到我的球衣的 ResourceConfig 类。在将 log4j 与我的其他库一起使用时,我可能错过了这部分,所以现在它工作得很好。

于 2015-08-06T08:57:15.060 回答