Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译Java程序有困难,我是新手。Can';我不知道如何处理目录_Java_Compilation - Fatal编程技术网

编译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这样的构建工具,那么它将为您完成。