我正在使用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导入语句放在我的程序中。
对于这样的问题,我看到的其他答案是使用一个包含行:BasicConfigurator.configure()的try-catch语句;
当我把它放进去时,Eclipse告诉我:"BasicConfigurator不能被解析“,它给了我自己创建类的选项。
我不知道我做错了什么。任何帮助都将不胜感激。预先感谢所有回复的人。
发布于 2015-08-06 08:57:15
这是因为javapns使用依赖项log4j记录信息,并且在运行时找不到它。
Javapns文档声明了这里:
启用日志库日志记录 javapns使用Log4J进行日志记录。要快速启用日志记录,请添加以下代码: 导入org.apache.log4j.*; 在代码中使用javapns之前: 尝试{ BasicConfigurator.configure();} catch (异常e) {} 如果已经在使用log4j,则可以通过在log4j.properties文件中添加以下行来启用javapns的日志记录:
log4j.logger.javapns=debug要解决证书或SSL问题,请将以下内容添加到Java参数中: -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与我的其他库一起使用时,我可能错过了这个部分,所以现在它工作得很好。
https://stackoverflow.com/questions/30696164
复制相似问题