【问题标题】:Exception in thread "main" java.lang.NoClassDefFoundError: Huffman (wrong name: p3/Huffman)线程“主”java.lang.NoClassDefFoundError 中的异常:Huffman(错误名称:p3/Huffman)
【发布时间】:2023-03-03 00:07:02
【问题描述】:

我不确定如何解决这个问题,但我认为这是一个类路径错误。如果这是我的文件结构,我需要知道在哪里运行以下命令:

monas-mbp:p3 mona$ java Huffman c p3code.txt p3input.txt p3output.tx
Exception in thread "main" java.lang.NoClassDefFoundError: Huffman (wrong name: p3/Huffman)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

嗯,我已经将 Huffman.class 从以下路径复制到当前目录 /Users/mona/java/p3/src/p3 使用

cp /Users/mona/java/p3/bin/p3/Huffman.class Huffman.class

这就是我在 Eclipse 中所拥有的。我创建了项目 p3,然后它自动创建了包 p3,而以前它用于创建 default package

知道解决方法是什么吗?还有为什么它没有像往常一样自动创建default package

[更新]好吧,我没想到会收到如此令人困惑的答案,因为项目名称以及自动包名称都是p3。您能否更详细地说明您的答案?这是 Eclipse 在我的计算机中创建的结构:

当我在 bin/p3 中运行命令时,我会得到以下结果:

monas-mbp:p3 mona$ pwd
/Users/mona/java/p3/bin/p3
monas-mbp:p3 mona$ java Huffman c p3code.txt p3input.txt p3output.tx
Exception in thread "main" java.lang.NoClassDefFoundError: Huffman (wrong name: p3/Huffman)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

【问题讨论】:

    标签: java eclipse package classpath


    【解决方案1】:

    它自动创建包 p3,而以前它用于 创建默认包。

    Huffman 类必须有一个包声明为 p3。因此,当您在 eclipse 项目中复制文件时,eclipse 要么要求您将文件移动到 p3 包中,要么从文件中删除包声明。

    根据您项目中的其他文件(Heap、HeapSandBox 等)是否需要为 p3 项目,您可能需要移动文件。

    要运行 Huffman 课程,您需要使用 package.classname

    java p3.Huffman -cp p3code.txt p3input.txt p3output.tx
    

    【讨论】:

    • p3项目中的所有文件都自动有package p3
    • 我应该在哪个路径写这个命令? java p3.Huffman c p3code.txt p3input.txt p3output.tx可以给我绝对路径吗?
    • 转到包含 c3 的目录并从那里运行 java 命令。不要进入 c3。
    【解决方案2】:

    我已经将 Huffman.class 从以下路径复制到当前目录,即 /Users/mona/java/p3/src/p3 使用

    cp /Users/mona/java/p3/bin/p3/Huffman.class Huffman.class

    现在从p3 的父目录执行java,而不是从p3,如果您已将其复制到当前目录,则执行以下命令集

     mkdir p3
     mv Huffman.class p3/
     java p3.Huffman c p3code.txt p3input.txt p3output.tx
    

    所以结构应该是相对于当前目录的

    p3
    \
     |
     |
     ------Huffman.class
    

    注意:您正在使用 eclipse 编写代码,为什么不从它启动

    【讨论】:

    • 这对我来说是一个模糊的答案,因为我有两个 p3。你能用真实的命令和路径来展示它吗?
    • 我应该在哪个路径写这个命令? java p3.Huffman c p3code.txt p3input.txt p3output.tx 可以给我绝对路径吗?
    • 您能看到我的问题中的更新吗?你的更新让我很困惑!
    • 转到cd p3/bin 然后java p3.Huffman and other parameters awesomescreenshot.com/06337w0619
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2011-09-14
    • 2014-11-06
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多