由java.lang.NoClassDefFoundError引起:
我在程序下面有这个由java.lang.NoClassDefFoundError引起:,java,jvm,Java,Jvm,我在程序下面有这个 package com; import java.io.PrintStream; import java.net.URL; import java.net.URLConnection; public class Caller { public static void main(String[] args) { try { URL url = new URL(
package com;
import java.io.PrintStream;
import java.net.URL;
import java.net.URLConnection;
public class Caller
{
public static void main(String[] args)
{
try
{
URL url = new URL("http://localhost:8080/Test/Ravi.jsp");
connection = url.openConnection();
}
catch (Exception ioe)
{
URLConnection connection;
System.err.println("IOException: " + ioe.getMessage());
}
}
}
当我运行这个时,我会
C:\Program Files\Apache软件基金会\Apache-tomcat-6.0.33\webapps\Test\WEB-INF\classes>java com.Caller
Exception in thread "main" java.lang.NoClassDefFoundError: com/Caller
Caused by: java.lang.ClassNotFoundException: com.Caller
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: com.Caller. Program will exit.
现在还不清楚为什么要从Tomcat目录运行控制台应用程序,但它基本上找不到您的类 您可能在当前目录下有一个
com
目录,在该目录下有一个Caller.class
文件。如果不是这样的话,您需要了解如何编译代码,并修复它
我猜你刚刚跑了:
javac Caller.java
java com.Caller
这将在当前目录中创建类文件。有两种方法可以解决这个问题。您可以使用-d
:
javac -d . Caller.java
java com.Caller
或者,您可以将源文件移动到反映包结构的结构中,即自己创建com
目录:
mkdir com
move Caller.java com
javac com\Caller.java
java com.Caller
或者更好,您可以将源文件与二进制文件分开:
mkdir src\com
move Caller.java src\com
javac -d bin src\com\Caller.java
java -cp bin com.Caller
现在还不清楚为什么要从Tomcat目录运行控制台应用程序,但它基本上找不到您的类 您可能在当前目录下有一个
com
目录,在该目录下有一个Caller.class
文件。如果不是这样的话,您需要了解如何编译代码,并修复它
我猜你刚刚跑了:
javac Caller.java
java com.Caller
这将在当前目录中创建类文件。有两种方法可以解决这个问题。您可以使用-d
:
javac -d . Caller.java
java com.Caller
或者,您可以将源文件移动到反映包结构的结构中,即自己创建com
目录:
mkdir com
move Caller.java com
javac com\Caller.java
java com.Caller
或者更好,您可以将源文件与二进制文件分开:
mkdir src\com
move Caller.java src\com
javac -d bin src\com\Caller.java
java -cp bin com.Caller
在运行
java
命令时,必须确保将.class
文件的位置添加到类路径中(以便执行可以找到已编译的类)
因此,请转到com
目录,并使用:
java -cp . Caller
在运行
java
命令时,必须确保将.class
文件的位置添加到类路径中(以便执行可以找到已编译的类)
因此,请转到com
目录,并使用:
java -cp . Caller
这意味着中的类不存在。请。尝试再次构建项目并将其部署到web服务器中。这意味着中的类不存在。请。尝试重新构建项目并将其部署到web服务器。如果说“错误的名称:com/Caller”或类似的话,则会失败。Caller类声明在com包中。我想我只是更新我的答案有点晚:)我不确定你的意思-现在仍然不正确。OP不应该这样做;它不起作用。类存在,我无法发布图片,但错误仍然存在。它们可能存在,但很可能位于错误的位置。@PavanKumar:它们可能存在。你需要给我们更多的信息(最好包括你为什么要在一个web应用程序目录中执行所有这些操作),这样就不会说“错误的名称:com/Caller”或类似的话。Caller类声明在com包中。我想我只是更新我的答案有点晚:)我不确定你的意思-现在仍然不正确。OP不应该这样做;它不起作用。类存在,我无法发布图片,但错误仍然存在。它们可能存在,但很可能位于错误的位置。@PavanKumar:它们可能存在。您需要向我们提供更多信息(理想情况下包括您为什么首先在web应用程序目录中执行所有这些操作)。这可能是一个愚蠢的疑问,但我希望您已经确保Caller.class存在于C:\Program Files\Apache Software Foundation\Apache-tomcat-6.0.33\webapps\Test\web-INF\classes\com下?如果没有,您必须使用javac编译到源代码。正如Jon在回答中所说,不清楚您为什么试图从tomcat目录内部运行该类@StephenC的可能副本:不,这是一个不同的例外,原因不同。可能是一个愚蠢的疑问,但我希望您已经确保Caller.class存在于C:\Program Files\Apache软件基金会\Apache-tomcat-6.0.33\webapps\Test\WEB-INF\classes\com下?如果没有,您必须使用javac编译到源代码。正如Jon在回答中所说,不清楚您为什么试图从tomcat Directory内部运行该类@StephenC的可能副本:不,这是一个不同的异常,原因不同。它可能存在,但位于错误的位置。就我个人而言,我不建议首先在web服务器上部署命令行应用程序……是的。。你是对的。他需要把它放在一个正确的地方和适当的包装结构。好吧,它可能存在,但放在错误的地方。就我个人而言,我不建议首先在web服务器上部署命令行应用程序……是的。。你是对的。他需要把它放在一个合适的位置和合适的包装结构