编译Java程序有困难,我是新手。Can';我不知道如何处理目录
我一直在网上搜索,试图找到我问题的答案,但对于我这样的初学者来说,我所看到的每一个地方似乎都有太复杂的解决方案。我一直在做这个项目,现在才意识到我应该做一个包,或者类似的东西。但问题是,在我开始尝试之前,我的程序运行得很好,而现在它根本不起作用。我得到这个错误:编译Java程序有困难,我是新手。Can';我不知道如何处理目录,java,compilation,Java,Compilation,我一直在网上搜索,试图找到我问题的答案,但对于我这样的初学者来说,我所看到的每一个地方似乎都有太复杂的解决方案。我一直在做这个项目,现在才意识到我应该做一个包,或者类似的东西。但问题是,在我开始尝试之前,我的程序运行得很好,而现在它根本不起作用。我得到这个错误: Exception in thread "main" java.lang.NoClassDefFoundError: BubbleSort. class Caused by: java.lang.ClassNotFoundExcepti
Exception in thread "main" java.lang.NoClassDefFoundError: BubbleSort. class
Caused by: java.lang.ClassNotFoundException: BubbleSort.class
at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
at java.lang.ClassLoader.loadClass(ClassLoader.java:672)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
at ``java.lang.ClassLoader.loadClass(ClassLoader.java:638)
Could not find the main class: BubbleSort.class. Program will exit.
如果我没有弄错的话,我的“路径”是这样的。我通过远程连接连接到学校的Z:drive,从那里我有一个名为myFirstname_Lastname_A4的文件夹,
然后我找到了另一个名为sortingzz的文件夹,我相信它应该只有我的源文件,但每当我编译时,它也会有我的类文件。下面是我编译的步骤
cd myFirstname_Lastname_A4/sortingzz
javac*.java
(很好用,这就是我在sortingzz文件夹中保存类文件的地方)
java*
(这就是我得到错误的地方)
我很确定我只是想把程序搞错。在我开始胡乱处理我还没有准备好的东西之前,我通常只运行包含我的主函数的文件,就像这样
javac SortingImplementation.java
java SortingImplementation
这在很大程度上是可行的,但是我开始在从其他类调用某些类时遇到困难,所以我发现我应该打包和导入一些东西
如果这就是问题所在,我在每个源文件的顶行上都有:
包装分类
我是这样导入的:
导入排序。*
这是正确的,对吗
更新:
我决定放弃课堂探路,尝试打包所有东西,因为和往常一样,我得到的回答超出了我的想象,老实说,我认为没有必要
在删除包并从所有内容导入之后,再次使用javac*编译,这次它实际上编译了。然而,每当我尝试运行包含main的类时,SortingImplementation就会告诉我
Could not find the main class: SortingImplementation. Program will exit.
我不明白,我现在正在查看SortingImplementation.class,以及所有其他类和java文件,所以我不确定它试图做什么。
javac*.java
很好。这将编译您的文件。但是,您只需要运行包含main方法的文件:javamainclass
您说您正在使用包来组织类。在这种情况下,需要使用-cp
标志设置类路径
javac-cp/path/to/parent/of/package classname.java
和
java类名
另外,您的主类应该声明为
public
,并且应该有一个main()
NoClassDefFoundError,当类在编译时被识别,但在运行时不可用时发生。
因此JVM无法在类路径中找到您的类
使用-cp标志指定包的工作位置。命令
javac*.java
将找到的所有java文件编译为相应的.class
文件。如果您所有的类文件都在同一个文件夹中(它们应该在同一个文件夹中),那么只需运行常规的java排序实现
命令
java*
会根据您的操作系统产生一个不需要的命令。例如,在Linux上,它将由操作系统扩展到java SortingImplementation.java SortingImplementation.class BubbleSort
。最后一个是目录,它当然不是一个可执行类。您需要指向包使用的目录-cpflagOP可能没有声明他的类public
。是的,我只是决定让类路径和打包见鬼,所以我把它都去掉了,它编译得很好。但现在,每当我尝试执行java排序实现时,我的类和主函数都会出现相同的错误。线程“main”java.lang.NoClassDefFoundError中出现异常:SortingImplementation@user2993636使用javac*.java重新编译所有内容后,仍然会出现ClassDef错误吗?您确定所有java源文件都在当前目录中吗?试试java-cp。SortingImplementationOk,我把所有的.java文件都放在一个文件夹中,在我看来,每个人都告诉我.class文件需要放在一个单独的文件夹中。那么,包含类的文件夹应该在我的.java文件文件夹中,还是应该在其他地方?我之所以问这个问题,是因为每当我编译时,.class文件都会与我的.java文件一起自动创建在文件夹中。当你开始学习这门语言时,将.java和.class文件放在同一个文件夹中根本不是问题。但是我们确实习惯于将它们分开,所以我们有一个很好的工作区分开。此外,如果您正在访问包,您将注意到.class文件将以类似于packagename的目录结构结束。如果您使用像Eclipse这样的IDE,或者像maven这样的构建工具,那么它将为您完成。