当前位置: 首页 > 知识库问答 >
问题:

java能够编译,但无法使用cmd找到类错误

公冶安怡
2023-03-14

您好,最近我开始从c语言转换到java语言,其中一个练习是使用cmd编译和运行java程序。

我用nethtml" target="_blank">beans编写了一个简单的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,我从某个地方读到,我必须包括软件包名称,以便运行,所以我键入

java helloworld。你好世界

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

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

原因:java。lang.ClassNotFoundException:Helloworld

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

共有1个答案

笪煌
2023-03-14

你必须使用

java helloworld.Helloworld      

并从helloworld的父文件夹,在您的情况下是src目录。

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

您可以为编译器设置许多标志,如srcdir、Target etdir,以将类和源分开。但是基本上,当您调用类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

javac -s ./src helloworld/Helloworld.java -d bin

但是bin或类没有获得包名称的一部分,并且您不能通过将该目录前置到调用路径来扩展类的调用:

java bin.helloworld.Helloworld

不行。但是

java -cp ./bin helloworld.Helloworld

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

 类似资料:
  • 在我的java项目中,我有三个java类: 1.App.java2.UrlLibrary.java3.我的terator.java 首先,当java文件位于默认包中时,然后是应用程序。java在eclipse和cmd中的编译和运行都很好。 但是,当我在自定义包中设置java文件时,它在eclipse中运行良好,但在cmd中编译时失败。我得到的错误是:- 最有可能的是,发生错误是因为我使用了pp.j

  • 我有一个gradle 4.1多项目,其中包含一个包含2个子文件夹“api”和“实现”的“项目A”。 多项目使用在主build.gradle的子项目部分中定义的< code>kotlin和< code>java-library插件。实现项目具有对< code>:projectA:api的API依赖性 在api文件夹中,我在“src/main/java”中有kotlin和java文件,在实现项目中,我

  • 我转到我的cmd和到目录()。然后使用进行编译。这似乎起作用了,因为我在同一目录下有一个文件。现在我想运行这个文件,我输入并得到错误,“Could not find or load main class”。我尝试了多种方法,包括在结尾添加和,但我总是得到错误。我看了一些答案和文档,我设法使它工作,如果我进入: (即从包中取出) 然后运行: 因此,这似乎将类路径临时设置为当前目录,并从包运行Test

  • 我在项目中从头开始创建了新的Java模块。在模块创建向导中选择了“创建'src'文件夹”。源文件夹中只有一个“com”包,其中包含两个公共类(例如A和B)。类实例化B类。IDE不显示错误,当光标位于类源中的类名上时,按下“ctrl B”键将打开B类源。但是当我试图编译一个类时(通过上下文菜单- 错误:(15,20)找不到符号类B “src”文件夹被标记为源根目录。 看起来像是IDE错误。 有人建议

  • 问题内容: 我试图得到以下消息: 好吧,有一个开放的jdk,我也下载了另一个。我尝试将JAVA_HOME指向两者,现在已设置: 我还尝试选择其中一种打开方式,但是其中的不同jdk版本出现相同的错误。 我该如何解决?提前致谢。 问题答案: 似乎您的PATH未正确选择…“ echo $ PATH”的输出是否包含javac所在的目录?我建议如下: 打开终端并执行: 如果javac -version仍然不

  • 我有一个奇怪的问题。我在不同的模块中添加了一个接口,当我在我的IDE上运行它时,IDE编译正常,一切正常,但是当我执行时,我收到一个错误提示。这是的日志: 一句话是: 导入path.to.where.interface.lives.界面 我的界面如下: 我甚至将依赖项添加到包中,即所在的pom文件中,但我仍然看到了问题。