Java代码编译但不执行:“找不到主类”

时间:2011-10-05 06:22:57

标签: java

这涉及尝试运行网络应用程序。代码编译正确,但是在尝试使用“java SendMail”运行时,java返回:

C:\Butte>java SendMail
Exception in thread "main" java.lang.NoClassDefFoundError: SendMail (wrong name:
 je3/net/SendMail)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        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: SendMail.  Program will exit.

这是一个简单的配置问题。我有一个最近足以支持其他网络代码的Java包。源代码是:

package je3.net;
import java.io.*;
import java.net.*;

/**
 * this software sends e-mail via a mailto : url
 */

public class SendMail {
    public static void main(String[] args) {
        // --- SNIP ----
    }
}

非常感谢,

乔尔

1 个答案:

答案 0 :(得分:3)

您的课程在je3.net个包中,因此您需要将其作为:

运行
java je3.net.SendMail

然而,听起来你可能也需要以不同的方式编译它 - 因为它会将je3\net\SendMail.class视为文件名。基本上,您的源和输出应该与您声明的包结构相匹配。

你没有 为源代码执行它 - 你可以只写:

javac -d . SendMail.java
java je3.net.SendMail

因为-d .部分会使javac为您创建正确的目录结构。但是,我个人将SendMail.java移至je3\net目录。