参考这篇文章 Receiving "wrong name" NoClassDefFoundError when executing a Java program from the command-line
我不明白如何解决问题
实际上在我的java源代码中有一行:
包es_2011;
当我通过JCreator编译程序时,一切都很完美。 它创建了一个名为es_2011的文件夹,用于放置.class文件。 执行操作也顺利进行,程序运行正常。
现在我只想使用命令行。 所以我将我的java文件放在javac.exe所在的目录中,但每当我尝试编译时,我都会得到同样的错误
我使用的命令是:javac ProgAudioJ.java
路径(javac.exe所在的位置)是:C:\ Program files \ Java \ jdk1.6.0_22 \ bin
有人愿意帮我理解,告诉我我该做什么吗? 非常感谢... MAX
答案 0 :(得分:1)
用于看起来像这样的设置(在windows下)
C:\ classDir - >是项目 C:\ classDir \ testpackage - >是唯一使用的包(包“testpackage”) C:\ classDir \ testpackage \ Main.class - >是包含main方法的类(重要:它是.class而不是.java)
Main.class如下所示:
package testpackage;
public class Main {
public static void main(String[] args) {
System.out.println("Program started! ;-)");
}
}
使用命令提示符:
c:\classDir> java testpackage.Main
结果:
Program started! ;-)
根据您的问题,它在IDE中启动,但不是从控制台启动: - 检查您是否真的使用.class文件的路径? - 使用控制台转到.class文件的目录,而不是项目(例如在Eclipse中它是bin目录 - 输入完整的合格类名(包括分隔的包。 - >例如testpackage.Main
更多信息可以在以下位置找到: http://www.oracle.com/technetwork/java/compile-136656.html
希望有所帮助
答案 1 :(得分:0)
MAX,如果类定义它在包es_2011中,那么它应该在一个具有相同名称的文件夹中。
因此,在您的情况下,将ProgAudioJ.java放在es_2011文件夹中然后运行 javac es_2011 \ ProgAudioJ.java
后者要运行它,你需要命令
java es_2011.ProgAudioJ
答案 2 :(得分:0)
您应该在javac.exe
中添加path
。编辑路径变量并将路径附加到jdk的bin
然后将java文件放在名为es_2011
的目录中,因为包声明为es_2011
然后编译
c:\es_2011\javac YourJava.java
现在回到C:
c:\java es_2001.Yourjava
答案 3 :(得分:0)
在阅读了其他帖子后:“Receiving "wrong name" NoClassDefFoundError when executing a Java program from the command-line”我想你会转到你的ProgAudioJ.class
文件所在的目录es_2011并运行
java ProgAudioJ
来自该文件夹。
然后你必须转到上面的文件夹(cd ..
)并运行
java es_2011.ProgAudioJ
答案 4 :(得分:0)
Java中的每个包对应于文件系统上的文件夹。因此,诸如com.stackoverflow
之类的包声明意味着源类需要位于文件夹./com/stackoverflow
中。通常,整个项目都有一个单独的src
文件夹,其中包含com/stackoverflow
。
编译Java类时,您不需要将源文件放在与javac.exe
相同的目录中,但是您需要确保javac.exe
在您的操作系统中PATH
变量。这告诉操作系统在运行命令时它应该在哪里查找可执行文件,在* nix机器上这通常是/usr/bin
或只是/bin
但是在Windows机器上,可执行文件通常存在于应用程序中自己的目录,即C:\Program Files\something
。假设您已经正确安装了JDK,javac.exe
应该已经在PATH
中,您可以通过打开命令行并运行javac
来检查这一点(就像那样)。如果你得到一些输出然后一切都很好,系统知道在哪里找到javac.exe
。
接下来,您需要转到项目文件夹并输入从项目文件夹运行的javac -d . src/com/stackoverflow/MainSO.java
通知。这将在项目根目录中创建一个名为com
的文件夹,并将编译后的类放在com/stackoverflow
中。 -d
标志告诉javac
将编译好的类放在哪里,如果不加考虑,编译后的类将是源代码所在的位置。
然后,当您想要运行类时,键入java com.stackoverflow.MainSO
(无.class)。至关重要的是,此命令需要在包含类层次结构根目录的目录中运行(即包含已编译类的com
文件夹)。您可以通过为带有java
标志的java
命令提供类路径,为-cp
指定其他位置来查找类。默认情况下,类路径将包含运行java
命令的目录。例如,如果您的项目具有外部.jar文件的依赖项,则需要在类路径中提供它们中的每一个(带有完整文件路径)(这适用于编译器)。 IDE会自动为您执行此操作。
希望有所帮助。