java能够编译,但无法使用cmd找到类错误 你好,最近我开始从C++转到java,一个练习就是用CMD ./P>编译和运行一个java程序。
好吧,我用netbeans编写了一个简单的HelloWorld程序并保存了它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
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