【发布时间】:2016-04-16 18:34:59
【问题描述】:
我正在用 Java 和 JavaFX 构建软件。它生成 PDF 报告(使用 DynamicReports),然后使用 SendGrid API 发送来发送它们。我已经将 SendGrid API .jar 文件添加到类路径中。
问题是当我实例化我的 SengGrid 子类时,我的 JavaFX 应用程序崩溃了。如您所见:
Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: com/sendgrid/SendGrid$Email
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760) at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at Reporting.TableReport.lambda$build$0(TableReport.java:160)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: com.sendgrid.SendGrid$Email
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 20 more
现在有趣的部分是,当我从非 JavaFX 项目调用 API 时,它可以完美运行。更有趣的是,当我从同一个 JavaFX 项目中的“控制台”主类调用它时,它也可以工作。
到目前为止,我已经尝试从我的 JavaFX 代码中调用“控制台”main 作为一种静态方法来完成我的任务(发送 PDF 文件)。但是,我又遇到了同样的异常。
谁能提出解决方案来解决这个问题? (或者至少绕过它)
【问题讨论】:
-
你是在main方法里面调用API吗?如果您使用的是 JavaFX,则不应在 main 中添加任何内容,而是使用 start。
-
不,我不调用是在 main 方法中。只有在我注意到 API 在非 JavaFX 上下文中完美运行之后,我才在同一个项目中添加了另一个公共主代码(没有任何 JavaFX 相关代码),我从我的 JavaFX 应用程序调用它,但这也不起作用。
标签: java javafx noclassdeffounderror sendgrid