Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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能够编译,但无法使用cmd找到类错误 你好,最近我开始从C++转到java,一个练习就是用CMD ./P>编译和运行一个java程序。_Java - Fatal编程技术网

java能够编译,但无法使用cmd找到类错误 你好,最近我开始从C++转到java,一个练习就是用CMD ./P>编译和运行一个java程序。

java能够编译,但无法使用cmd找到类错误 你好,最近我开始从C++转到java,一个练习就是用CMD ./P>编译和运行一个java程序。,java,Java,好吧,我用netbeans编写了一个简单的HelloWorld程序并保存了它 package helloworld; public class Helloworld { public static void main(String[] args) { System.out.println("Hello world"); } } 现在,我保存的.java文件位于C:\Users\eatmybuns\Documents\NetB

好吧,我用netbeans编写了一个简单的HelloWorld程序并保存了它

package helloworld;      
public class Helloworld 
{


   public static void main(String[] args) 
   {
        System.out.println("Hello world");
   } 

}      
现在,我保存的.java文件位于C:\Users\eatmybuns\Documents\NetBeansProjects\Helloworld\src\Helloworld中

现在我打开cmd,将目录更改为上面的目录并键入 javac Helloworld.java 现在我可以在同一个文件夹中看到Helloworld.class,我从某个地方读到,为了让它运行,我还必须包含包名,所以我键入了

helloworld

它给了我一个错误,所以我尝试从src文件夹运行它,但它也给了我相同的错误

错误:无法找到或加载主类Helloworld

原因:java.lang.ClassNotFoundException:Helloworld

我读过一些可能的解决方案,比如使用-cp或使用-d,但它总是给我同样的错误。我目前正在使用jdk1.8.0_161。在windows 10上。

您必须使用

java helloworld.Helloworld      
和helloworld的parentfolder,在您的示例中,它是src目录

包和目录结构之间有着紧密的关系

您可以为编译器设置许多标志,如srcdir、targetdir,以使类和源代码保持分离。但基本上,当调用类helloworld.helloworld时,JVM会查找目录helloworld/,并在那里需要一个helloworld.class

要在没有编译器标志的情况下实现这一点,还必须将源代码放入helloworld/文件夹

类的全名是helloworld。helloworld和
java
应该在那里查找并找到它

mkdir helloworld
mv Helloworld.java  helloworld/
javac helloworld/Helloworld.java 
java helloworld.Helloworld 
Hello world
如果您一开始不知道,并且从没有包声明的类开始,这会有点令人惊讶。但逻辑简单明了:每个包都由目录结构反映出来

由于sourcedir和targetdir的区别,下面的目录结构必须与没有相同,只是起点不同。公共目标目录是类或bin,如:

javac -s . helloworld/Helloworld.java -d classes

但是bin或类没有获得包名的一部分,并且您不能通过在调用路径前面加上该dir来扩展类的调用:

java bin.helloworld.Helloworld
不行。但是

java -cp ./bin helloworld.Helloworld

应该。如果仔细阅读文档,您会发现,它仔细区分了源文件(Helloworld.java)、类(Helloworld)和文件(Helloworld.class)

您需要在项目的根目录下进行编译。不是从包中输入的。我假设你说的项目根是C:\Users\eatmybuns\Documents\NetBeansProjects\Helloworld\src?对不起,我输入的地方有一个打字错误。我使用javac来运行类文件,我已经编辑了它,但是我尝试从我之前声明的src目录运行,但仍然不起作用,我怀疑这与我的类路径有关,但我不知道是什么。谢谢你的帮助though@eatmybananapls:谢谢你通知我。我更新我的答案。
java -cp ./bin helloworld.Helloworld