Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient

Funkeyfreak

Aktives Mitglied
Hey,

ich habe commons-net-3.7.jar von dieser Website gedownloadet:


Zuvor habe ich Version 3.1 benutzt, womit mein Programm sogar eine Weile funktioniert hat. Nur jetzt bekomme ich diese Fehlermeldung:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient

Caused by: java.lang.ClassNotFoundException: org.apache.commons.net.ntp.NTPUDPClient
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 1 more

Ich benutze JavaSE-14 (Java-JDK) mit Eclipse als Entwicklungsumgebung. Ich benutze kein Maven Projekt sondern ein ganz normales Java Projekt. D.h. ich benutze eine ganz normale JavaSE-14 lib und eine selbst erstellte lib mit der commons-net-3.7.jar drinnen.
Weiß einer wie ich das Problem lösen kann? Ich habe schon nach einer Lösung gesucht aber finde keine Lösung für mein Problem.

Ich habe auch schon nach meiner pom.xml Datei gesucht und in dieser den unteren Code rein geschrieben um die jar Datei zu installieren, jedoch nicht mit Erfolg. Um die Jar Datei manuell zu installieren über die pom.xml muss man ein Maven Projekt benutzen oder? Kenne mich ehrlich gesagt nicht damit aus und bis jetzt hat es eig immer gereicht eine eigene lib anzulegen mit den jeweiligen jar Dateien die man benötigt:

<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.7</version>
<scope>system</scope>
<systemPath>
C:\Users\denni\Downloads\Apache jar\commons-net-3.7.jar
</systemPath>
</dependency>


habe auch schon dies eingefügt, aber die Jar Datei installiert sich ja nicht von selbst und daher bin ich ein bisschen aufgeschmissen:

<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.7</version>
</dependency>





Mein Code:

Code:
    import java.net.InetAddress;

    import java.util.Date;

  

    import org.apache.commons.net.ntp.NTPUDPClient;

    import org.apache.commons.net.ntp.TimeInfo;

  

  

  

    public class time {

        public static void main(String[] args) throws Exception {   

                 NTPUDPClient client = new NTPUDPClient();

                 client.open();

                 // use host name or IP address of target NTP server

                 InetAddress hostAddr = InetAddress.getByName("pool.ntp.org");

                 TimeInfo info = client.getTime(hostAddr);

                 info.computeDetails(); // compute offset/delay if not already done

                 Long offsetValue = info.getOffset();

                 Long delayValue = info.getDelay();

                 String delay = (delayValue == null) ? "N/A" : delayValue.toString();

                 String offset = (offsetValue == null) ? "N/A" : offsetValue.toString();

      

                 System.out.println(" Roundtrip delay(ms)=" + delay

                                 + ", clock offset(ms)=" + offset); // offset in ms

                 client.close();

        }

    }

Ich hoffe ihr könnt mir helfen da ich schon seit einer geraumen Weile an dem Problem hänge und echt schon verzweifelt bin
 
Ja, um Maven (mit der pom.xml) zu nutzen, muss das Projekt ein Maven-Projekt in Eclipse sein. Es ist aber nichts leichter, als ein Eclipse-Projekt in ein Maven-Projekt umzuwandeln: Rechtsklick im Package Explorer -> Configure -> Convert to Maven Projekt.
Meiner Meinung nach sollte man NIEMALS mehr ein natives Eclipse-Projekt verwenden, sondern IMMER entweder als Maven oder Gradle Projekt konfigurieren. Es hat wirklich null Nachteile und ENORM viele Vorteile.
In deinem nicht-Maven-Eclipse-Projekt: Hast du denn die Jar-Datei auch manuell in den Build Path deines Eclipse-Projektes eingebunden?
Also z.B. durch Rechtsklick im Package Explorer -> Build Path -> Configure Build Path... -> Tab "Libraries" -> "Classpath": Add External JARs...
 
In deinem nicht-Maven-Eclipse-Projekt: Hast du denn die Jar-Datei auch manuell in den Build Path deines Eclipse-Projektes eingebunden?
Also z.B. durch Rechtsklick im Package Explorer -> Build Path -> Configure Build Path... -> Tab "Libraries" -> "Classpath": Add External JARs...
Ja, genau so habe ich dass eingefügt. Das Importieren zeigt er mir ja auch nicht als Fehler an, also muss er ja die Jar Datei erkennen, denke ich.
 
Ein Problem, was seit Java 9 auftritt: Verwendest du eventuell Jigsaw/Java 9 Modules, also den Modulepath und nicht den Classpath?
Ansonsten schau doch mal in die Jar Datei (unter "Referenced Libraries" im Package Explorer) rein. Die fragliche Klasse org/apache/commons/net/ntp/NTPUDPClient sollte da ja sein.
 
Habe jetzt noch eine Frage, warum wird bei diesem Programm die Variable latency nicht ausgegeben (also der Mittelwert ausgegeben). Ich benutze ja System.out.println, sodass das Programm eigentlich den Mittelwert ausgeben sollte. Die Variable hat den Mittelwert gespeichert aber gibt diesen per System.out.println nicht aus.

System.out.println(latency); gibt 0 aus, dass ist mir klar - geht mir lediglich um innerhalb der while-Scheife

Wenn ich ein neuen Thread dafür aufmachen soll dann bitte einmal mir schreiben, dann tue ich dass.


Code:
import java.io.*;
import java.util.*;

public class JavaPingExampleProgram
{

  public static void main(String args[])
  throws IOException
  {
    // create the ping command as a list of strings
    JavaPingExampleProgram ping = new JavaPingExampleProgram();
    List<String> commands = new ArrayList<String>();
    commands.add("ping");
    //commands.add("-c");
    //commands.add("5");
    commands.add("74.125.236.73");
    ping.doCommand(commands);
  }

  public void doCommand(List<String> command)
  throws IOException
  {
    String s = null;

    ProcessBuilder pb = new ProcessBuilder(command);
    Process process = pb.start();

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
 
 
 
    // read the output from the command
    System.out.println("Here is the standard output of the command:\n");
    while ((s = stdInput.readLine()) != null)
    {
      System.out.println(s);
    }

 
    // read any errors from the attempted command
    System.out.println("Here is the standard error of the command (if any):\n");
    while ((s = stdError.readLine()) != null)
    {
      System.out.println(s);
    }
 
    System.out.println("here is the average latency :\n");
    double latency = 0.0;
    while ((s = stdInput.readLine()) != null)
    {
        if (s.contains("Mittelwert")) {
            String timeWithValue = s.split(" = ")[2];
            String value = timeWithValue.split("ms")[0];
            latency = Double.parseDouble(value);
            System.out.println("latency " + latency);
        }
    }
    System.out.println(latency);
 
  }

}

Output:
Here is the standard output of the command:


Ping wird ausgef?hrt f?r 74.125.236.73 [2a00:1f78:fffd:9::d435:9868] mit 32 Bytes Daten:
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=28ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=30ms
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms

Ping-Statistik f?r 2a00:1f78:fffd:9::d435:9868:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 25ms, Maximum = 30ms, Mittelwert = 27ms
Here is the standard error of the command (if any):

here is the average latency :

0.0
 
Zuletzt bearbeitet:
Das Problem müsste sein, dass Du ja von stdInput bereits alles gelesen hast. Die erste while Schleife liest ja alles.
Wenn Du dann also erneut stdInput lesen willst, dann ist da nichts mehr, d.h. er geht in die while Schleife nie rein.
 

Zurück
Oben