2

我编写了五个类,简而言之,它们的目的是为会议创建 GUI 和记录参与者。我已经构建了面板并添加了它们,FocusListeners、ActionListeners、ItemListeners。

据我所知,我在崩溃时收到的消息与我的类路径有关,但我真的不知道如何修复它。这是发生崩溃的代码(当我为面板的两个按钮添加 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)

我知道这里有很多经验丰富的人,我在互联网上找不到任何关于这方面的帮助。

4

1 回答 1

3

至于告诉java在哪里可以找到ConferenceHandler(我为听起来很愚蠢而道歉-新手会问作业问题)我正在使用Blue Jay,我所要做的就是单击主程序,程序就会运行。我不知道如何从命令行执行此操作。

要查看的位置在java命令的文档中;例如这里。特别注意讨论类路径和设置它的不同方式的内容。另请阅读此页面


我意识到这是类路径的问题,无论我做什么,我都无法修复它。所以我把所有的原始课程都粘贴到一个新文件夹中,它就像一个魅力。

这是一个巫毒解决方案。你真的需要了解这个问题。

为此,让我们回顾一下上面的一些评论:

堆栈跟踪另有说明。它们是无包的(换句话说,在默认包中,如果 BlueJ 以某种方式告诉您)。– @BalusC

我希望我知道那是什么意思..... - @unit

@BalusC 的意思是堆栈跟踪告诉你它试图加载的类的全名。

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

而全名(在这种情况下)是ConsoleHandler......不是some.pkg.ConsoleHandler

不完全清楚的是为什么会发生这种情况,但我怀疑您实际上正在运行.class与您正在查看的源代码不匹配的旧文件。您的 Voodoo 解决方案很可能通过用新文件替换旧.class文件来“解决”这个问题。但如果是这种情况,您需要了解您构建/部署的方式有什么问题。否则,你会一次又一次地被这种事情绊倒。

于 2011-02-13T10:55:21.183 回答