从命令行运行Java程序

3

我现在遇到了一个新手问题,以前从未使用过命令行来运行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"命令来运行它,因为这是它所在的包名。我感到很困惑。谢谢您的帮助。


你能发布你的源代码文件吗?这些文件是否在正确的文件夹层次结构中?(即,OmadUpdate.java是否在名为 "main" 的文件夹内,该文件夹位于名为 "openmetadata" 的文件夹内,后者又位于名为 "org" 的文件夹内?你在Java源代码文件顶部使用了 "package" 声明吗? - undefined
请参考以下内容:https://dev59.com/D3RB5IYBdhLWcg3wz6ad - undefined
5个回答

9
您的类似乎是在org.openmetadata.main包中声明的。为了使Java正常加载该类,它需要在符合包结构的正确目录结构中。
因此,org.openmetadata.main.OmadUpdate的类文件应该在目录org\openmetadata\main中。当您运行java命令时,此目录结构的根应该在类路径上 - 对于一个简单的例子,这意味着当前目录应该是org\openmetadata\main的父目录。
在运行java时,您需要使用句点而不是斜杠来指定完整的类名,即:
java org.openmetadata.main.OmadUpdate

1
谢谢所有回答得那么快的人,但这是唯一有效的方法,-cp似乎没有帮助,我所需要做的就是运行java org.openmetadata.main.OmadUpdate。非常感谢! - undefined

5
编译完Java类后,您将获得以下目录结构:
org/
  openmetadata/
    main/
      OmadUpdate.class
      OmadUpdate.java

请确保您在org的父目录中,然后运行。
java -cp . org.openmetadata.main.OmadUpdate

2
类名中的嵌套包名由句点分隔,而目录则使用斜杠。很可能你尝试了java -cp . org/openmetadata/main/OmadUpdate,但你应该(因为你正在指定一个类名)尝试java -cp . org.openmetadata.main.OmadUpdate
请注意,为了使其正常工作,您必须在org子目录的上一级目录中运行它。否则,那个类路径指令cp .将在错误的目录中开始搜索。

0

使用设置了类路径的方式启动您的Java应用程序:

java -cp . org.openmetadata.main.OmadUpdate

0

-cp . 不会做任何事情,我不认为。你必须确保你在正确的目录中调用java,这是第一个包名/文件夹的部分(在你的情况下是org)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接