【问题标题】:API works with Java application but not JavaFXAPI 适用于 Java 应用程序,但不适用于 JavaFX
【发布时间】: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


【解决方案1】:

原来这是 Netbeans 的问题。在 Eclipse 中使用完全相同的代码可以完美地工作。我找不到解释,但我为任何可能偶然发现与我相同的问题的人提供这个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2015-01-12
    相关资源
    最近更新 更多