Java-Fehlermeldung

DKK007

PCGH-Community-Veteran(in)
Kann jemand etwas mit dieser Fehlermeldung anfangen:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$300(GlassViewEventHandler.java:388)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$null$450(GtkApplication.java:139)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
... 31 more
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
at org.neo4j.kernel.configuration.Settings$21.apply(Settings.java:849)
at org.neo4j.kernel.configuration.Settings$21.apply(Settings.java:840)
at org.neo4j.kernel.configuration.Settings$DefaultSetting.apply(Settings.java:1290)
at org.neo4j.kernel.configuration.Settings$DefaultSetting.apply(Settings.java:1205)
at org.neo4j.graphdb.config.Setting.validate(Setting.java:80)
at org.neo4j.kernel.configuration.IndividualSettingsValidator.lambda$validate$1(IndividualSettingsValidator.java:62)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at org.neo4j.kernel.configuration.IndividualSettingsValidator.validate(IndividualSettingsValidator.java:70)
at org.neo4j.kernel.configuration.Config.replaceSettings(Config.java:403)
at org.neo4j.kernel.configuration.Config.<init>(Config.java:227)
at org.neo4j.kernel.configuration.Config.<init>(Config.java:201)
at org.neo4j.kernel.configuration.Config.embeddedDefaults(Config.java:149)
at org.neo4j.kernel.configuration.Config.embeddedDefaults(Config.java:129)
at org.neo4j.kernel.configuration.Config.embeddedDefaults(Config.java:105)
at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:193)
at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:70)
at application.DBService.init(DBService.java:38)
at application.FXMLController.button1Clicked(FXMLController.java:82)
... 41 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 65 more

Ich weiß nicht, warum die das nicht hinbekommen bei Java mal verständliche Fehlermeldungen zu liefern.
 
Naja nur mit den Exceptions kann man nicht viel anfangen. Kannst du den Fehler reproduzieren? Tritt er immernur bei bestimmten Funktionen in deinem Programm auf? Hast du schonmal versucht mit dem Debugger den Code Schritt für Schritt durchzugehen und zu kucken wo genau der Fehler auftritt? Ist zwar nervig aber hat mir schon oft geholfen Fehler im Code zu finden.

Ansonsten gebe ich dir den Rat das Problem auf Stackoverflow zu posten. Am besten mit Snippets des Source-Codes. Da wirst du eher die Chance haben eine Lösung für dein Problem zu kriegen.
 
Naja nur mit den Exceptions kann man nicht viel anfangen.
Mit der speziellen jedenfalls nicht. Wenn ich aber mal davon ausgehe, dass die Exceptions bei Java ähnlich denen bei .NET aufgebaut sind, dann fehlen exakt die ... 65 more Zeilen am Ende. Denn ganz am Ende steht (bei .NET und "passender" Implementierung) die wirklich verursachende Zeile im Quelltext.

Mit der Kombination aus Quelltext und dem Kontext des Fehlerauftritts lässt sich bei eigenen Programmen dann durchaus der Fehler oft sehr gut eingrenzen und so zumindest ein Szenario zur Reproduktion erstellen.

Ich weiß nicht, warum die das nicht hinbekommen bei Java mal verständliche Fehlermeldungen zu liefern.
Es ist Aufgabe des Entwicklers, Fehler abzufangen und bewusst zu bewerten. Eine Laufzeitumgebung kann diesen Design-/Implementierungsmangel nur bestmöglich kompensieren. Mehr Infos wie Quelltextnamen und Zeilennummern (im Aufrufstack) stehen ihr nunmal nicht zur Verfügung.

Ob es Sinn macht, dass Java Dir die ganze Litanei der betroffenen Libraries und darin betroffenen Quelltextzeilen ausgibt, musst Du als Entwickler selber entscheiden. Wenn Du die Debug-Versionen der Libs nutzt oder zumindest die entsprechenden Debug-Infos zur Verfügng stellst, dann war es Dein Wunsch, dass Du all diese Infos im Fehlerfall auch erhälst.
 
So auf den ersten Blick sieht mir das nach fehlender Dependency aus. Mal den Classpath überprüft, ob alle Abhängigkeiten in der korrekten Version vorhanden sind?
 
Das Problem tritt erst seit dem letzten Eclipse-update auf. Deshalb weiß ich nicht genau wo.

Passiert irgendwo hier:

Code:
            db = DBService.INSTANCE;
            if (dbstarted==true)
            {
                db.shutdown();
                db.init(pfad);
                dbstarted = true;
            }else{                            
                db.init(pfad);
                dbstarted = true;
             }

Problem ist wohl die init-Funktion:
Code:
public void init(String pfad){
      if (pfad==null)
        {
          return;
        } else {
          dbfile = new File(pfad);
        }  
      
      System.out.println(" --- ");  
      
    // Datenbanktreiber initialisieren  
    GraphDatabaseFactory factory = new GraphDatabaseFactory();
    
    /*GraphDatabaseService*/ db = factory.newEmbeddedDatabase(dbfile);     
    
    System.out.println(" * Datenbank gestartet * ");
  }
 
Zuletzt bearbeitet:
Ist das ein maven Projekt? Die fehlende Dependency müsste in commons-lang3 sein. Oder der Classpath stimmt nicht. Meinst du mit Update neue Version installiert oder das integrierte Update?
 
Über die Paketquellen war vor einiger Zeit eine neue Eclipseversion verfügbar.

War tatsächlich die fehlende commons-lang3 Dependency. Komisch, dass so etwas nicht schon beim kompilieren auffällt.
Programm läuft wieder. :daumen:
 
War tatsächlich die fehlende commons-lang3 Dependency. Komisch, dass so etwas nicht schon beim kompilieren auffällt.

Es gibt halt mehrere Arten von Dependencies. Unter anderem eben "Compile-Time"-Dependencies, da merkt der Compiler schon, dass irgendwas fehlt, und "Runtime"-Dependencies, da wird halt davon ausgegangen, dass die entsprechenden Dependencies zwar zur Compile-Time noch nicht vorliegen, sondern erst zur Runtime vorliegen (z.B. dynamische Abhängigkeit durch einen Auto-Updater, etc.).

Edit:
Lässt sich mit passendem Beispiel auch nochmal hier auf StackOverflow nachlesen:

runtime - Compile time vs Run time Dependency - Java - Stack Overflow
 
Zurück