[Java] API Probleem NoClassDefFoundError

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • T i M
  • Registratie: April 2004
  • Laatst online: 19-09 06:55
Ik ben sinds gisteren aan het stoeien met Java. Ik probeer een connectie te maken met een programma geschreven in Java met behulp van de bijgeleverde API.

Wat heb ik gedaan? Een nieuw project aangemaakt in NetBeans en de api.jar file toegevoegd aan het project. Vervolgens heb ik een geprobeerd connectie te maken. Daarvoor gebruik ik onderstaande code:

Java:
1
2
3
4
5
6
try {
    String serverAddress = "127.0.0.1";
    pinterface = (Guiscserverinterface) Naming.lookup("rmi://" + serverAddress + ":11099/pricer");
} catch (Exception e) {
    System.out.println(e.getMessage() );
}


Ik krijg echter onderstaande foutmelding:

code:
1
Exception in thread "main" java.lang.NoClassDefFoundError: gnu/trove/THashSet


Ik heb op die foutmelding gegoogled en het zou iets te maken hebben met mijn CLASS_PATH instellingen, maar dat regelt NetBeans toch automatisch voor mij?

Het rare is echter, tenminste voor mij, dat ik die foutmelding niet krijg als ik niet kan connecten naar de API. Bijvoorbeeld foute host opgegeven of het programma stoppen, dan krijg ik netjes een foutmelding dat ie geen verbinding heeft kunnen maken.

Ik heb programmeer ervaring, maar niet met deze taal. Iemand ideeën?

Acties:
  • 0 Henk 'm!

  • Mammon
  • Registratie: December 2006
  • Laatst online: 24-08 20:45
probeer dit is:

Guiscserverinterface server = (Guiscserverinterface) Naming.lookup("rmi://" + serverAddress + ":11099/pricer");

Acties:
  • 0 Henk 'm!

  • T i M
  • Registratie: April 2004
  • Laatst online: 19-09 06:55
Mammon schreef op zondag 03 mei 2009 @ 15:34:
probeer dit is:

Guiscserverinterface server = (Guiscserverinterface) Naming.lookup("rmi://" + serverAddress + ":11099/pricer");
Dat zou het probleem niet mogen zijn, zie het eigenlijk nu pas. Er stond eerst pinterface, ipv interface.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:00

Creepy

Tactical Espionage Splatterer

Laat de heel strackstrace anders eens zien. Welke class geeft die melding? Als je een library hebt gebruikt die blijkbaar nog andere afhankelijkheden heeft dan kan je IDE dat lang niet altijd automatisch voor je goedzetten. Lees in dat geval even de docs van de door jouw gebruikte libs door en zorg dat je de afhankelijkheden ook meeneemt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • T i M
  • Registratie: April 2004
  • Laatst online: 19-09 06:55
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Exception in thread "main" java.lang.NoClassDefFoundError: gnu/trove/THashSet
        at java.lang.Class.getDeclaredFields0(Native Method)
        at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
        at java.lang.Class.getDeclaredField(Class.java:1880)
        at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1610)
        at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:52)
        at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:425)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:413)
        at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:310)
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:547)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at java.rmi.Naming.lookup(Naming.java:84)
        at javaapplication1.APIDemo.<init>(APIDemo.java:26)
        at javaapplication1.Main.main(Main.java:20)
Caused by: java.lang.ClassNotFoundException: gnu.trove.THashSet
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        ... 19 more


Grappig dat je zegt om de docs door te lezen, tenminste als je een 2 pagina tellend PDF'je zo mag noemen.

Dit staat erin:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Steps to use API

All the required packages, libraries and class files are supplied in library file called
pricerlib.jar.

Please go through the steps below to access the API methods.
1. Include the pricerlib.jar in the client project or include this jar file in the classpath.
2. Import all the required RMI packages. If you are not sure use import java.rmi.*;
3. Import se.pricer.r3_3.server package and se.pricer.r3_3.remote package.
4. A code similar to following snippet, shown below, should be written to get an access to
the interface

Guiscserverinterface pInterface =
(Guiscserverinterface) Naming.lookup(
"rmi://127.0.0.1:11099/pricer");

Acties:
  • 0 Henk 'm!

  • T i M
  • Registratie: April 2004
  • Laatst online: 19-09 06:55
Creepy schreef op zondag 03 mei 2009 @ 16:03:
Laat de heel strackstrace anders eens zien. Welke class geeft die melding? Als je een library hebt gebruikt die blijkbaar nog andere afhankelijkheden heeft dan kan je IDE dat lang niet altijd automatisch voor je goedzetten. Lees in dat geval even de docs van de door jouw gebruikte libs door en zorg dat je de afhankelijkheden ook meeneemt.
Het werkt nu :$ :D Ik heb alle .jar files die het programma bevat geinclude in het project en nu werkt het. Ik ga nu alle .jar files er stap voor stap uithalen, zodat ik weet welke vereist zijn en welke niet.

Het rare is dat de documentatie het volgende zegt:
All the required packages, libraries and class files are supplied in library file called
pricerlib.jar.
Maar het werkt nu, thnx.

Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

foutmelding zegt dat hij de klasse definitie niet kan vinden, van welke klasse pricies staat in de message:
gnu/trove/THashSet

http://www.google.com/search?q=gnu.trove.THashSet

leid ons naar http://trove4j.sourceforge.net/

Mocht je een (voor jouw) onbekende exception tegen komen kijk dan eerst in de javadoc van de exceptie
http://java.sun.com/javas...NoClassDefFoundError.html (voor deze is het niet super informatief - en zou wel beter moeten/kunnen)
Ik ga nu alle .jar files er stap voor stap uithalen, zodat ik weet welke vereist zijn en welke niet.
je kan beter in netbeans(kan ook in eclipse/intellj) gewoon in de tree kijken (op plusje of pijltje drukken) en je ziet pricies welke packages(en als je door gaat ook klasses) in een jar zitten. Werkt denk ik beter dan trial error.

IceManX schreef: sowieso

Pagina: 1