从命令行运行Java程序

时间:2012-03-26 20:53:02

标签: java command

所以我在这里有一个noob时刻,我以前从未使用命令行来运行java程序,但我现在需要。我遇到的问题是,当我尝试运行程序时,我得到一个ClassNotFoundException。我的班级名为OmadUpdate。我已经使用javac命令将OmadUpdate.java文件编译成OmadUpdate.class。我已经检查了目录,它们肯定都在那里,但是当我运行java OmadUpdate命令时,它会给我一条错误消息说

Exception in thread "main" java.lang.NoClassDefFoundError: OmadUpdate (wrong name:     org/openmetadata/main/OmadUpdate)
......
......
Could not find the main class: OmadUpdate. Program will exit

但它就在目录中。当我输入dir时,我同时拥有OmadUpdate.class和OmadUpdate.java。我甚至尝试使用“java org.openmetadata.main.OmadUpdate”,因为这是它所包含的包名。我很难过。谢谢你的帮助。

5 个答案:

答案 0 :(得分:8)

您的课程似乎已在org.openmetadata.main包中声明。

要让java正确加载类,它需要在与包结构匹配的正确目录结构中。

因此org.openmetadata.main.OmadUpdate的类文件应位于org\openmetadata\main目录中。

然后,当您运行java命令时,此目录结构的根应位于类路径上 - 对于一个简单示例,这只意味着您当前的目录应该是org\openmetadata\main的父目录

运行java时,您需要使用句点而不是斜杠来指定完整的类名,即

java org.openmetadata.main.OmadUpdate

答案 1 :(得分:4)

使用javac编译类后,您将拥有以下目录结构:

org/
  openmetadata/
    main/
      OmadUpdate.class
      OmadUpdate.java

确保您位于org的父目录中,然后运行

java -cp . org.openmetadata.main.OmadUpdate

答案 2 :(得分:2)

类名的嵌套包名由句点分隔,而目录使用斜杠。您尝试java -cp . org/openmetadata/main/OmadUpdate

时应该java -cp . org.openmetadata.main.OmadUpdate尝试的org是好的(因为您指定了班级名称)

请注意,要使其正常工作,您必须在cp .子目录上方的目录中运行它。否则,classpath指令{{1}}将在错误的目录中开始搜索。

答案 3 :(得分:0)

使用类路径集启动您的Java应用程序:

java -cp . org.openmetadata.main.OmadUpdate

答案 4 :(得分:0)

-cp。我不会做任何我想不到的事情。你必须确保在正确的目录中调用java,这是第一个包名/文件夹的一部分(在你的案例组织中)

您需要使用完整的包和类名来运行它。