2016-04-16 4 views
2

Ich baue eine Software in Java und JavaFX. Es generiert PDF-Berichte (mit DynamicReports) und sendet dann die SendGrid-API, um sie zu senden. Ich habe die SendGrid-API-JAR-Datei bereits zum Klassenpfad hinzugefügt.API arbeitet mit Java-Anwendung, aber nicht JavaFX

Das Problem ist, dass meine JavaFX-Anwendung abstürzt, wenn ich meine Unterklasse von SengGrid instanziiere. Wie Sie sehen können:

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 

Jetzt ist der interessante Teil ist, dass der API perfekt funktioniert, wenn ich es von einem nicht JavaFX Projekt nennen. Und interessanterweise funktioniert es auch, wenn ich es von einer Hauptklasse "console" innerhalb des JavaFX-Projekts aus aufrufen.

Bisher habe ich versucht, diese "console" main von meinem JavaFX-Code als eine Art statische Methode zu nennen, die meine Aufgabe erfüllen würde (Senden der PDF-Dateien). Aber wieder, ich stoße auf die gleiche Ausnahme.

Kann jemand eine Lösung vorschlagen, um das zu lösen? (oder gehen Sie wenigstens herum)

+0

Rufen Sie die API innerhalb der Hauptmethode auf? Wenn Sie JavaFX verwenden, sollten Sie nichts innerhalb von main hinzufügen, sondern stattdessen start. – Rafael

+0

Nein, ich rufe nicht innerhalb der Hauptmethode auf. Erst nachdem ich festgestellt habe, dass die API in einem Nicht-JavaFX-Kontext perfekt funktioniert, habe ich ein anderes öffentliches Hauptprogramm (ohne JavaFX-Code) im selben Projekt hinzugefügt, das ich von meiner JavaFX-Anwendung aus aufrufen kann, aber auch nicht. – AshYuri

Antwort

0

Es stellte sich heraus, dass es ein Problem mit Netbeans war. Die Verwendung des exakt gleichen Codes mit Eclipse funktioniert einwandfrei. Ich konnte keine Erklärung finden, aber ich gebe diese Antwort für jeden, der über das gleiche Problem wie ich stolpern könnte.

Verwandte Themen