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 中使用完全相同的代码可以完美地工作。我找不到解释,但我会为可能遇到与我相同问题的任何人提供这个答案。