2010-10-21 4 views
0

В моем коде у меня есть вложенный класс, который содержит объект и целое число. Это должно означать начальное и конечное местоположения для метода подсписок.Отладка ClassNotFoundException

Код исполняется до той точки, в которой объект и целое число имеют установленные значения. Я проверил это в отладчике.

Следующая строка затем вызывает ListLoc<E> startNode= new ListLoc<E>(start, startElement);, и это то, что делает исключение.

Класс уже определен как

private class ListLoc<E>{ 
    public Chunk<E> node; 
    public int index; 

    /* This object is created to hold a chunk and index location. Two 
    * objects will be created for the start and end locations for 
    * creating a sublist 
    */ 
    public ListLoc(Chunk<E> node, int index){ 
     this.node= node; 
     this.index= index; 
    } 
} 

Странная вещь эта часть кода выполнял отлично, прежде чем я заменил местный startNode с глобальной переменной. Эта идея не сработала, поэтому я изменил переменную обратно, и это исключение возникло.

Я не вносил изменений в путь или исполнение класса. Единственный раз, когда это всплывает в отладчик

EDIT:. Добавлен трассировки стека

ClassNotFoundException (Throwable) (String, Throwable) строка:. 217
ClassNotFoundException (Исключение) (строка, Throwable) линия:. нет в наличии ClassNotFoundException линия (String): нет в наличии
URLClassLoader $ 1.run() линия: нет в наличии
AccessController.doPrivileged линия (PrivilegedExceptionAction, AccessControlContext): не доступен [нативный метод]
L auncher $ ExtClassLoader (URLClassLoader) .findClass (String) строка: не доступно
линия Launcher $ ExtClassLoader.findClass (String): не доступно
линия Launcher $ ExtClassLoader (ClassLoader) .loadClass (String, Boolean): не доступен Launcher $ AppClassLoader (ClassLoader) .loadClass (String, булево) строка: не доступен Launcher $ AppClassLoader.loadClass (String, булево) линия: нет в наличии
Launcher $ AppClassLoader (ClassLoader) .loadClass (String) строка: не доступно

Из того, что мне кажется, это классLoader, который вызывает исключение.

ответ

2

Это поможет, если вы могли бы уточнить, что исключение, однако, я предполагаю, что вы получаете ClassNotFound для Е.

Похоже, ваш профессор не уточнил концепцию Дженерики еще. Я бы рекомендовал посмотреть, что такое общая структура данных. Совет, который я бы дал, - это искать, почему E не определен и почему вы пытаетесь создать список из них.

Я думаю, что следующая ссылка может помочь разъяснить синтаксис и концепции, лежащие в них: http://download.oracle.com/javase/tutorial/extra/generics/index.html

Особенно в следующем разделе: http://download.oracle.com/javase/tutorial/extra/generics/simple.html

+0

Как сотрудник сказал бы, Java не имеет «реальные дженерики», как это делает .NET. Поэтому вы не можете сказать «новый E()» или что-то в этом роде. – StriplingWarrior

+0

Добавлена ​​трассировка стека. Дело в том, что я не пытаюсь составить список E, это всего лишь начальный и конечный указатель. Объект будет отправлен в цикл, который проходит через список и копирует значения между начальной и конечной точками в новый список. – Jason

+0

@Jason: Вы правы в том, что ClassLoader запускает исключение. Однако это преднамеренное поведение. В вашем примере вы создаете объект ListLoc, который работает с общим типом (E). – bogertron

Смежные вопросы