【问题标题】:java.lang.NoClassDefFoundError Main (Wrong Name : com/leslie/quiz/Main)java.lang.NoClassDefFoundError Main(错误名称:com/leslie/quiz/Main)
【发布时间】:2013-09-09 20:20:44
【问题描述】:

我有三门课。主要、核心和开始。这是 Main 的代码:

package com.leslie.quiz;

    public class Main {
        public static void main(String[] args) {
            com.leslie.quiz.Start.main(null);
        }
    }

Core 的代码如下:

    package com.leslie.quiz;

    public class Core {
        public void coldlunch() {

        }

        public void hotlunch() {

        }
    }

这是开始的代码:

    package com.leslie.quiz;

    import java.awt.EventQueue;

    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import java.awt.BorderLayout;
    import javax.swing.JButton;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;

    public class Start {
        com.leslie.quiz.Core core = new Core();
        float opacity = 1;

        private JFrame frmCafeteriaQuiz;

/**
 * Launch the application.
 */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        Start window = new Start();
                        window.frmCafeteriaQuiz.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
             });
         }

/**
 * Create the application.
 */
public Start() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frmCafeteriaQuiz = new JFrame();
    frmCafeteriaQuiz.setTitle("Cafeteria Quiz");
    frmCafeteriaQuiz.setResizable(false);
    frmCafeteriaQuiz.setBounds(100, 100, 471, 331);
    frmCafeteriaQuiz.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel lblWelcomeToThe = new JLabel("Welcome to the Cafeteria Quiz! Are you a responsible hawk?");
    frmCafeteriaQuiz.getContentPane().add(lblWelcomeToThe, BorderLayout.NORTH);

    JButton btnIHaveCold = new JButton("I have Cold Lunch");
    btnIHaveCold.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            core.coldlunch();
        }
    });
    frmCafeteriaQuiz.getContentPane().add(btnIHaveCold, BorderLayout.WEST);

    JButton btnIHaveHot = new JButton("I have Hot Lunch");
    btnIHaveHot.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            core.hotlunch();
                }
            });
    frmCafeteriaQuiz.getContentPane().add(btnIHaveHot, BorderLayout.EAST);
            }

    }

我正在运行 cmd,并将目录更改为我所有类所在的包。当我通过键入“java Main”运行 Main 时,我得到了

java.lang.NoClassDefFoundError Main(错误名称:com/leslie/quiz/Main)

我读过的一件事是,问题可能是由从包内部调用类引起的?它不是很详细,当我从程序主文件夹中运行程序时,它做了同样的事情。如果我在 Eclipse 中运行该程序,它工作得很好并且没有显示错误。而且我知道 eclipse 使用不同的编译器。但是我尝试过的没有任何效果。任何帮助都会很棒。谢谢。 :)

【问题讨论】:

  • 如果您引用了外部库但未将其添加到构建路径中,通常会发生这种情况
  • 最好显示堆栈跟踪,即显示 java.lang.ClassNotFoundError: some.package.which.TheClassNotFound 的消息。
  • 你是从命令行运行的吗?如果是这样,请提供用于编译/运行程序的命令。我打赌你要么没有从包根目录运行,要么没有正确设置类路径。
  • 听起来更像是您的类文件和/或源文件不在正确的目录中。您的 src 目录 (a) 是否标记为源目录?它是 (b) root 源目录吗?您的源文件 (c) 是否在正确的包/目录层次结构中?
  • 由于您的 Main 类在 com.leslie.quiz 包中,请尝试从 com 目录的父目录(必须包含已编译的层次结构)运行命令 java com.leslie.quiz.Main。类文件)。请注意,Eclipse 中默认的二进制输出目录是项目的bin 目录。

标签: java eclipse noclassdeffounderror


【解决方案1】:

由于你的Main 类在com.leslie.quiz 包中,你应该 cd 到编译输出的父目录并运行命令:

java com.leslie.quiz.Main

请注意,Eclipse 中的默认二进制输出目录是项目的bin 目录。尽管它在 Eclipse 的 Package Explorer 视图中是隐藏的,但它仍然存在于文件系统中。您应该能够从 Eclipse 的 Navigator 视图中看到它。

bin 的内容如下所示:

bin/
  com/
    leslie/
      quiz/
        Core.class
        Main.class
        Start.class

在这种情况下,cd 到 bin 并运行 java 命令。

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2021-10-17
    相关资源
    最近更新 更多