- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
新Java开发人员遇到的一个常见问题是他们的程序无法运行并显示错误消息:Could not find or load main class ...
这是什么意思,是什么原因造成的,以及如何解决?
最佳答案
java <class-name>
命令语法
首先,您需要了解使用java
(或javaw
)命令启动程序的正确方法。
常规语法1是这样的:
java [ <options> ] <class-name> [<arg> ...]
<option>
是命令行选项(以“-”字符开头),
<class-name>
是标准Java类名称,而
<arg>
是传递给应用程序的任意命令行参数。
packagename.packagename2.packagename3.ClassName
java
命令允许您使用斜杠代替句点。例如
packagename/packagename2/packagename3/ClassName
java
命令的外观示例:
java -Xmx100m com.acme.example.ListUsers fred joe bert
java
命令执行以下操作:
com.acme.example.ListUsers
类的编译版本。
main
给出的修饰符的
public static void main(String[])
方法。 (请注意,方法参数的名称不是签名的一部分。)
String[]
传递给命令行参数(“ fred”,“ joe”,“ bert”)。
java
命令无法找到该类。实际上,消息中的“ ...”将是
java
正在寻找的完全限定的类名。
java ListUser
com.acme.example
之类的包中声明该类时,则必须在
java
命令中使用完整的类名,包括包名。例如
java com.acme.example.ListUser
java ListUser.class
java com/acme/example/ListUser.class
java com.acme.example.listuser
java com.acme.example.mistuser
java ListUser.java
java lots of arguments
java
命令找不到该类。要了解这一点,您需要了解“类路径”的概念。 Oracle文档对此进行了很好的解释:
java
command documentation
java
命令时有效的CLASSPATH环境变量。检查目录名和JAR文件名是否正确。
java
命令时有效的当前目录中检查它们是否正确解析...。
;
,在其他Windows上是
:
。如果您在平台上使用了错误的分隔符,则不会收到明确的错误消息。相反,您将在Windows上获得不存在的文件或目录。会被忽略的路径。)
com.acme.example.Foon
的类时,它将查找具有以下路径名的“ .class”文件:
/usr/local/acme/classes/com/acme/example/Foon.class
com.acme.example.Foon
,那么JVM将在目录“ com / acme / example”中查找“ Foon.class”:
Caused by: java.lang.NoClassDefFoundError: <path> (wrong name: <name>)
com.acme.example.Foon
类,
/usr/local/acme/classes/com/acme/example/Foon.class
,
/usr/local/acme/classes/com/acme/example/
,
# wrong, FQN is needed
java Foon
# wrong, there is no `com/acme/example` folder in the current working directory
java com.acme.example.Foon
# wrong, similar to above
java -classpath . com.acme.example.Foon
# fine; relative classpath set
java -classpath ../../.. com.acme.example.Foon
# fine; absolute classpath set
java -classpath /usr/local/acme/classes com.acme.example.Foon
-classpath
选项可以缩短为
-cp
。检查相应的手册条目中的
java
,
javac
等。
package
声明。如果在IDE中执行此操作,则IDE的编译器会立即告诉您有关此信息。同样,如果您使用不错的Java构建工具,则该工具将以检测问题的方式运行
javac
。但是,如果您手动构建Java代码,则可以通过这种方式进行处理,以使编译器不会注意到问题,并且生成的“ .class”文件不在您期望的位置。
-Xdiag
选项添加到
java
命令行(作为
java
之后的第一件事)。它将输出有关类加载的各种信息,这可能会为您提供真正问题的线索。
(META-INF/*.SF)
中具有错误签名的JAR文件启动,显然可以遇到此问题。
java
的替代语法
java command
启动Java程序有三种语法。
java [ <options> ] -jar <jar-file-name> [<arg> ...]
java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred
com.acme.example.ListUser
)和类路径在JAR文件的MANIFEST中指定。
java [ <options> ] --module <module>[/<mainclass>] [<arg> ...]
<module>
本身定义,或由可选的
<mainclass>
给出。
java [ <options> ] <sourcefile> [<arg> ...]
java
命令的官方文档。
java
命令行。
关于java - “找不到或加载主类”是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59827707/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
在main()中声明其原型(prototype)的函数的返回数据类型为void。它包含一个指令返回;如 main() { void create(int *p); *some code
我想知道这个 scala 符号是什么:_@。 (搜索引擎无法识别奇怪的字符,因此很难在 google 上找到任何内容...) 这里是上下文: def doNodeParse(json: JValue)
在尝试编译我的项目时,它使用了一些第三方头文件,使用 mingw 4.4,我遇到了以下错误: Assembler messages: Error: junk at end of line, first
我正在解决 picoCTF 上的二进制漏洞利用挑战,并遇到了这段代码: ((void (*)())buf)(); 哪里buf是一个字符数组。 我解决了挑战,但似乎无法理解它到底在做什么。我看了this
我正在浏览 React Navigation docs我在那里遇到了这样的事情: import Ionicons from 'react-native-vector-icons/Ionicons';
selenium 中以下命令的含义是什么? 我尝试创建一个自动测试用例。然后如下://button[@type='submit'] 我在 selenium 工具中看到的语法。 最佳答案 这是一个 XP
我刚开始看书学习 C 语言,对他们讨论指针和数组的部分并没有感到困惑。如果有一个名为 a[NUM_ROW][NUM_COLS] 的多维数组(我只是将此数组讨论为特定的二维数组),那么 a[0] 是什么
这个问题在这里已经有了答案: How does "while(*s++ = *t++)" copy a string? (17 个答案) 关闭 9 年前。 我有一个代码块: int main ()
我没有在我的代码中处理 SIGCHLD。我的进程在终止后仍然立即被删除。我希望它成为僵尸进程。 如果我将 SIGCHLD 设置为 SIG_DFL 那么它会起作用吗?如何将 SIGCHLD 设置为 SI
我已经使用 matplotlib 一段时间了,但我并不真正理解这一行的作用。 fig, ax = plt.subplots() 谁能解释一下? 最佳答案 plt.subplots() 基本上是一个(非
我很难理解以下声明的含义。这个申报标准吗? double* (*p[3]) (void* (*)()); 谁能帮我理解这个声明的意思? 最佳答案 阅读复杂声明的规则:找到最左边的标识符并向外工作,记住
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我正在学习如何并行运行多个进程 ./script1.sh param1 1>/dev/null 2>&1 & pid1=$! ./script1.sh param2 1>/dev/null
我看到这些事件散布在 chaplin 示例代码中,但在文档或源代码中没有任何解释。似乎这意味着它是一个全局事件,触发了一个 Action 。那是对的吗?它们只是一个惯例,还是以某种方式强制执行? #
((void(*)(void))0)(); 所以我们将整数 0 类型转换为这个棘手的类型 (void(*))(void) 然后执行它。消息来源声称这应该有效,但实际上是什么? 我想这一定是像 #def
这个问题在这里已经有了答案: How does this JavaScript/jQuery syntax work: (function( window, undefined ) { })(win
if(a .feq. 5.0_dp) then **** if(a .fne. 5.2_dp) then ***我遇到了一些这样的代码。 .feq 有什么作用?或.fne。意思?是“=”还是“\=”?
所以我在阅读泛型方法时感到很困惑。先说一下这里的问题: 在这个例子中:假设我需要一个适用于任何类型 T 的 selectionSort 版本,方法是使用调用者提供的外部可比较对象。 第一次尝试: pu
我是一名优秀的程序员,十分优秀!