Программа компилируется нормально, но вылетает с NoClassDefFoundError - PullRequest
2 голосов
/ 13 февраля 2011

Я написал пять классов, которые, в двух словах, служат для создания графического интерфейса и записи участников для конференции. Я построил панели и добавил их, FocusListeners, ActionListeners, ItemListeners.

Из того, что я могу извлечь, сообщение, которое я получаю после сбоя, связано с моим Classpath, но я не знаю, как это исправить. Вот код, где происходит сбой (это когда я добавляю ActionListeners для двух кнопок для моей панели:

private void buildButtonPanel()
{
   //create the buttonpanel
   buttonPanel = new JPanel(new FlowLayout());
   //create the buttons
   calculate = new JButton("Calculate Charges");
   clear = new JButton    ("Clear");
   //add listeners to the buttons
   ConferenceHandler handler = new ConferenceHandler(this);
   calculate.addActionListener(handler);             //crash occurs on this line
   clear.addActionListener(handler);
   //create a text area
   JTextArea textArea = new JTextArea(5,30); 
   textArea.setLineWrap(true); textArea.setWrapStyleWord(true);
   //add a scrollbar to the textarea
   JScrollPane scroll = new JScrollPane (textArea);
   //add everything to the buttonpanel
   buttonPanel.add(calculate); buttonPanel.add(clear); buttonPanel.add(scroll);
}

Я получаю сообщение об ошибке:

java.lang.NoClassDefFoundError: ConferenceHandler
    at ConferenceGUI.buildButtonPanel(ConferenceGUI.java:63)
    at ConferenceGUI.<init>(ConferenceGUI.java:33)
    at IsItWorking.<init>(IsItWorking.java:16)
    at IsItWorking.main(IsItWorking.java:28)
Caused by: java.lang.ClassNotFoundException: ConferenceHandler
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at ConferenceGUI.buildButtonPanel(ConferenceGUI.java:63)
    at ConferenceGUI.<init>(ConferenceGUI.java:33)
    at IsItWorking.<init>(IsItWorking.java:16)
    at IsItWorking.main(IsItWorking.java:28)
    at __SHELL0.run(__SHELL0.java:6)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at bluej.runtime.ExecServer$3.run(ExecServer.java:774)

Я знаю, что здесь много людей с большим опытом, и я не могу найти никакой помощи в этом.

1 Ответ

3 голосов
/ 13 февраля 2011

Что касается сообщения Java, где найти ConferenceHandler (и я прошу прощения за глупое звучание - вопросы о домашнем задании задают новички), я использую Blue Jay, и все, что мне нужно сделать, это нажать на главную и программупробеги.Я понятия не имею, как это сделать из командной строки.

Место для поиска находится в документации по команде java;например, здесь .Обратите особое внимание на материал, который говорит о пути к классам и различные способы его установки.Также прочитайте эту страницу .


Я понял, что это была проблема с classpath, и что бы я ни делал, я не мог это исправить.Поэтому я взял все оригинальные классы и вставил их в новую папку, и это сработало как шарм.

Это решение Voodoo.Вам действительно нужно понять проблему.

Для этого давайте вернемся к некоторым комментариям выше:

Трассировка стека указывает на обратное.Они без пакетов (другими словами, в пакете по умолчанию, если BlueJ говорит, что вы буквально как-то).- @ BalusC

Хотелось бы знать, что это значит ..... - @ unit

Что @BalusC означает, что трассировка стека сообщает вам полное имя классачто он пытался загрузить.

    ...
    Caused by: java.lang.ClassNotFoundException: ConferenceHandler
    ...

И полное имя (в данном случае) ConsoleHandler ... не some.pkg.ConsoleHandler.

Не совсем понятно, почему это происходит, но я подозревают , что вы действительно запускаете старые .class файлы, которые не соответствуют исходному коду, который вы просматривали.И ваше решение Voodoo вполне могло бы «исправить» это, заменив старые файлы .class новыми.Но если это так, вам нужно понять, что не так с тем, как вы строите / разворачиваете.В противном случае вы снова и снова будете спотыкаться о таких вещах.

...