API 适用于 Java 应用程序但不适用于 JavaFX
API works with Java application but not JavaFX
我正在 Java 和 JavaFX 中构建软件。它生成 PDF 报告(使用 DynamicReports),然后使用 SendGrid API 发送来发送它们。我已经将 SendGrid API .jar 文件添加到 class 路径。
问题是,当我实例化 SengGrid 的子 class 时,我的 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.access0(URLClassLoader.java:73)
at java.net.URLClassLoader.run(URLClassLoader.java:368)
at java.net.URLClassLoader.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[=12=](TableReport.java:160)
at com.sun.javafx.application.PlatformImpl.lambda$null3(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater4(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$null8(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 项目中的 "console" main class 调用它时它也有效。
到目前为止,我已经尝试从我的 JavaFX 代码中调用 "console" main 作为一种静态方法来完成我的任务(发送 PDF 文件)。但是,我再次遇到了同样的异常。
任何人都可以提出一个解决方案来解决这个问题吗? (或者至少绕过它)
原来是 Netbeans 的问题。在 Eclipse 中使用完全相同的代码可以完美地工作。我找不到解释,但我会为可能遇到与我相同问题的任何人提供这个答案。
我正在 Java 和 JavaFX 中构建软件。它生成 PDF 报告(使用 DynamicReports),然后使用 SendGrid API 发送来发送它们。我已经将 SendGrid API .jar 文件添加到 class 路径。
问题是,当我实例化 SengGrid 的子 class 时,我的 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.access0(URLClassLoader.java:73)
at java.net.URLClassLoader.run(URLClassLoader.java:368)
at java.net.URLClassLoader.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[=12=](TableReport.java:160)
at com.sun.javafx.application.PlatformImpl.lambda$null3(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater4(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$null8(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 项目中的 "console" main class 调用它时它也有效。
到目前为止,我已经尝试从我的 JavaFX 代码中调用 "console" main 作为一种静态方法来完成我的任务(发送 PDF 文件)。但是,我再次遇到了同样的异常。
任何人都可以提出一个解决方案来解决这个问题吗? (或者至少绕过它)
原来是 Netbeans 的问题。在 Eclipse 中使用完全相同的代码可以完美地工作。我找不到解释,但我会为可能遇到与我相同问题的任何人提供这个答案。