JavaとJavaFXでソフトウェアを構築しています。 PDFレポート(DynamicReports付き)を生成し、SendGrid APIを使用して送信します。私は既にクラスパスにSendGrid API .jarファイルを追加しました。APIはJavaアプリケーションで動作しますが、JavaFXでは動作しません。
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プロジェクト内の「コンソール」メインクラスから呼び出すときにも機能します。
これまでは、私のタスク(PDFファイルを送信する)を満たす静的メソッドとしてJavaFXコードからその「コンソール」メインを呼び出そうとしました。しかし、再び、私は非常に同じ例外に遭遇する。
誰でも解決策を提案できますか? (または少なくとも回ってください)
メインメソッド内でAPIを呼び出していますか? JavaFXを使用している場合は、mainの中に何も追加しないでください。代わりにstartを使用してください。 – Rafael
いいえ、私はmainメソッドの中には呼び出さない。 JavaFX以外のコンテキストでAPIが完璧に動作し、JavaFXアプリケーションから呼び出す同じプロジェクトに別のパブリックメイン(JavaFX関連のコードなし)を追加したことに気づいただけですが、それもうまくいきませんでした。 – AshYuri