Toon posts:

[Java] Class.forName(String) -> NoClassDefFoundError

Pagina: 1
Acties:

Verwijderd

Topicstarter
Met behulp van Java Reflection heb ik een klasse ClassInspector geschreven die alle mogelijke info kan laten zien van .class bestanden. Ik heb hem getest met simpele "Hello World" klassen evenals met wat complexere; allemaal zelf geschreven.

Het probleem: Ik heb hier een aantal .class bestanden die ik niet zelf heb geschreven. Als ik hierop mijn ClassInspector loslaat, dan verschijnt de volgende error (met als te inspecteren bestand: Article.class):

java.lang.NoClassDefFoundError: Article (wrong name: CarPleasure/Article)

Dit komt doordat de methode Class.forName(String) om een of andere reden het bestand niet kan vinden.

De bestanden staan net als mijn zelf geschreven bestanden in de map "C:\java\CarPleasure". Het programma voer ik uit middels "java ClassInspector Article".

Hieronder even het stukje code dat voor problemen zorgt. Het gaat om de regel 9.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.lang.reflect.*;
 
public class ClassInspector
{
  public static void main(String[] args)
  {
    try
    {
      Class c = Class.forName(args[0]);
    }
    catch (Throwable e)
    {
      System.err.println(e);
    }
  }
}

  • DLGandalf
  • Registratie: Maart 2005
  • Laatst online: 29-11 13:12
volgens mij gaat er iets mis met packages bij jou

laat de eerste paar regels is zien uit Article

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:46

Robtimus

me Robtimus no like you

Volgens mij moet je er de package van class Article bijzetten. Zo werkt Class.forName("String") ook niet, maar moet het zijn Class.forName("java.lang.String"). Dus maak er eens van "CarPleasure.Article" (ervan uitgaande dat CarPleasure de package naam is).

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
Van de bestanden die ik niet zelf heb geschreven, heb ik alleen de .class bestanden, dus de eerste paar regels zeggen helaas weinig. Ik weet dus ook niet of ze tot een bepaalde package behoren.

Als ik "java ClassInspector CarPleasure.Article" uitvoer, dan verschijnt er een andere error, namelijk:
java.lang.ClassNotFoundException: CarPleasure.Article

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:46

Robtimus

me Robtimus no like you

Tip: open een project in Eclipse, met C:\java\CarPleasure als library. Dan kun je in een nieuwe source file "Article" intypen, dan CTRL+spatie, dan probeert Eclipse de import automatisch toe te voegen. Zo kun je proberen te achterhalen wat de package is van die class.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • DLGandalf
  • Registratie: Maart 2005
  • Laatst online: 29-11 13:12
dit gaat niet werken voor m
CarPleasure is idd de packagenaam
dus hij moet zijn main-class een directory hoger zetten
en in zijn code idd zoals Icemanx aangeeft in zijn 1e post

dus het wordt c:\java\Classinspector.java
die andereN laten staan

en rekening houden met die package naam en t zal moeten werken dus-> java ClassInspector CarPleasure.Article

[ Voor 7% gewijzigd door DLGandalf op 18-11-2006 18:57 ]


Verwijderd

Topicstarter
Top! Het werkt nu. Ik moest ClassInspector inderdaad een directory hoger zetten.

Muchos gracias.
Pagina: 1