Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaPNS NoClassDefFoundError_Java_Ios_Eclipse_Push Notification_Javapns - Fatal编程技术网

JavaPNS NoClassDefFoundError

JavaPNS NoClassDefFoundError,java,ios,eclipse,push-notification,javapns,Java,Ios,Eclipse,Push Notification,Javapns,我正在使用JavaPNS通过我的家庭计算机发送远程推送通知(iOS)。在完成了有关如何准备证书的步骤后,我获取了.p12文件并将其放入下面编写的代码中: import javapns.Push; import javapns.notification.Payload; import javapns.notification.PushedNotifications; import org.apache.log4j.*; public class Main{

我正在使用JavaPNS通过我的家庭计算机发送远程推送通知(iOS)。在完成了有关如何准备证书的步骤后,我获取了.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)控制台中出现以下错误:

线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/log4j/Logger 位于javapns.notification.Payload.(Payload.java:25) 在javapns.Push.alert(Push.java:47) 检查Main.check(Main.java:86) Main.Main(Main.java:115) 原因:java.lang.ClassNotFoundException:org.apache.log4j.Logger 在java.net.URLClassLoader$1.run(URLClassLoader.java:372) 在java.net.URLClassLoader$1.run(URLClassLoader.java:361) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:360) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:424) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 4更多 我的.p12文件位于java项目文件夹中,在查看之前提出的其他问题后,我将org.apache导入语句放在程序中

我看到的其他类似问题的答案是使用包含以下行的try-catch语句: BasicConfigurator.configure()

当我将其放入时,Eclipse告诉我:“BasicConfigurator无法解析”,它给了我自己创建类的选项


我不确定我做错了什么。任何帮助都将不胜感激。提前感谢所有回复者。

这是因为javapns使用依赖项log4j记录信息,在运行时找不到它

Javapns wiki文档说明:

启用日志记录 库日志记录

javapns使用Log4J进行日志记录。 要快速启用日志记录,请添加以下代码:

 import org.apache.log4j.*;
在代码中使用javapns之前:

try {

    BasicConfigurator.configure();

 } catch (Exception e) {  }
如果您已经在使用log4j,那么可以通过 将以下行添加到log4j.properties文件:

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>

log4j
log4j
1.2.17
如果您没有使用Maven,那么只需下载.jar并将其添加到项目的libs中即可

就我而言,我只是不能将log4j添加到依赖项中,因为它会使我的另一个libs崩溃。我实际上在寻找一种方法来禁用javapns的log4j

编辑:我最终向依赖项添加了log4j,并添加了BasicConfigurator.configure();去我的运动衫资源配置课。当我将log4j与我的另一个库一起使用时,我可能错过了这一部分,所以现在它可以正常工作了

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