我有下面的程序
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 Software Foundation\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
或者您可以将源文件移动到反射(reflect)包结构的结构中,即自己创建一个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 - 由java.lang.NoClassDefFoundError :引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8265419/