用命令行编译Java时遇到如下错误提示(该错误是在Class文件生成后,执行java命令时出现的)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用命令行编译Java时遇到如下错误提示(该错误是在Class文件生成后,执行java命令时出现的)相关的知识,希望对你有一定的参考价值。

Exception in thread "main" java.lang.NoClassDefFoundError: [LString;
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
at java.lang.Class.getMethod0(Class.java:2685)
at java.lang.Class.getMethod(Class.java:1620)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: String
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 6 more

参考技术A 你的java命令是怎么写的?
一般是:java + class文件名;例如:A.java 编译后生成A.class文件。则命令为:java A
如果这样都不行,可能是你所运行的class文件不在你现在所访问的路径下。应该在cmd环境下进入.class所在的文件目录下,然后运行 java A
参考技术B 主函数写错了,。 参考技术C 找不到类:String。。。
你的环境没问题吗?或者你又定义一个String???
参考技术D 你是 不是 定义这样的类?

public class String{


本回答被提问者和网友采纳
第5个回答  2013-03-16 把代码贴出来,报错贴出来我也不知道哪里错了啊。
类名不对吧

javac 及 java命令的使用问题(错误或无法加载主类)

 一、问题

使用 javac 命令编译完.java源文件后,用 java 命令运行.class文件时,通常会遇到如下或类似的问题:

错误: 找不到或无法加载主类 HelloWorld.class

二、解决

javac命令用来编译.java源文件。没有-d选项时直接在.java源文件同级目录下生产.class文件;有加-d时会在指定路径生成.class文件且文件在与包语句对应的目录下。

  • 当指定 -d path 选项时,会在path下生成 与.java文件里的包声明结构 相同的.class文件。如,若HelloWorld.java里有package com.zsm.test;语句,则执行javac -d path HelloWorld.java后在path下会生成com/zsm/test/HelloWorld.class
  • 当没有 -d path 选项时,在与.java相同目录下生成.class文件,无论HelloWorld.java里有没有包声明语句。虽然这种方式简单,但由于没有生成与包语句对应的目录,在执行后面的java命令时比较容易出错。

java命令用来执行.class文件,有两种方法来解决开头说到的 找不到或无法加载主类问题,关键在于需要在类名前加上与包声明语句相对应的package才能正确运行。

  • 一般我们在包所在目录的最上层执行 java package.类名 即可正确运行。(若.java中没有包语句,即在默认包下,则直接在类目录下执行 java 类名 命令即可)
  • 另一方法是用-cp指定包最上层所在的目录,这样就不用切到该目录执行java命令了,即 java -cp 包最上层所在目录  package.类名 。(若没包语句,则同上)

三、总结

综上,对于.class文件(不管有没有用-d path选项),我们有两种执行java命令的方法:

  • 一种为到包最上层目录执行 java package.类名 ,如假设当前在com的上层目录下,则 java com.zsm.test.HelloWorld或 java com/zsm/test/HelloWorld 即可(注意,对于后者,若切换到com下再 java zsm/test/HelloWorld 是错的)
  • 另一种不用到包最上层目录,而是用-cp选项指之,即 java -cp 包最上层所在目录  package.类名 ,如假设当前在com目录下,则 java -cp ../  com.zsm.test.HelloWorld 即可 

若.java里没有包名,则直接在.class所在目录执行 java 类名 命令即可。

 

以上是关于用命令行编译Java时遇到如下错误提示(该错误是在Class文件生成后,执行java命令时出现的)的主要内容,如果未能解决你的问题,请参考以下文章

java源文件编译时要放在哪里?

oracle存储过程提示编译完成但存在错误,如何查看错误

对于I/O流中解压中遇到的问题

DB2用export命令导出表发生错误,错误提示如下

编译java文件时提示找不到包

java之异常