“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:Huffman(错误名称:p3/Huffman)
我不知道如何修复这个问题,但我认为这是一个类路径错误。如果这是我的文件结构,我需要知道在哪里运行以下命令:“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:Huffman(错误名称:p3/Huffman),java,eclipse,package,classpath,Java,Eclipse,Package,Classpath,我不知道如何修复这个问题,但我认为这是一个类路径错误。如果这是我的文件结构,我需要知道在哪里运行以下命令: 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.define
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,而以前它用于创建默认包
。
知道怎么解决吗?还有为什么它没有像往常一样自动创建默认包
[更新]我没想到会收到如此令人困惑的答案,特别是因为项目名称和自动包名称都是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)
我已经将Huffman.class从下面的路径复制到了当前目录,即/Users/mona/java/p3/src/p3
cp/Users/mona/java/p3/bin/p3/Huffman.class-Huffman.class
现在从p3
的父目录执行java,而不是从p3
执行java,如果您已将其复制到当前目录,则执行以下一组命令
mkdir p3
mv Huffman.class p3/
java p3.Huffman c p3code.txt p3input.txt p3output.tx
所以结构应该是相对于当前目录的
p3
\
|
|
------Huffman.class
注意:您正在使用eclipse编写代码,为什么不从eclipse启动呢
它自动创建包p3,而以前它用于
创建默认包
Huffman类必须有一个包声明作为p3。因此,当您在eclipse项目中复制了该文件时,eclipse要么要求您将该文件移动到p3包中,要么从文件中删除包声明
根据项目中的其他文件(堆、HeapSandBox等)是否需要为p3项目,您可能需要移动这些文件
要运行Huffman类,需要使用package.classname
java p3.Huffman -cp p3code.txt p3input.txt p3output.tx
这对我来说是一个模糊的答案,因为我有两个p3。你能用真实的命令和路径来显示它吗?我应该在哪个路径上写这个命令?java p3.Huffman c p3code.txt p3input.txt p3output.tx你能告诉我绝对路径吗?你能看到我问题中的更新吗?你的更新让我很困惑!转到
cdp3/bin
然后javap3.Huffman和其他参数
p3项目中的所有文件都自动具有package p3
我应该在哪个路径中写入此命令java p3.Huffman c p3code.txt p3input.txt p3output.tx
您能给我绝对路径吗?转到包含c3的目录并从那里运行java命令。不要进去。