当前页面: 开发资料首页 → J2EE 专题 → 编译时正常,运行时报NoClassDefFound错误,详情内示 
编译时正常,运行时报NoClassDefFound错误,详情内示 
摘要: 编译时正常,运行时报NoClassDefFound错误,详情内示  
一个javamail的问题。
代码如下:
import javax.mail.*;
import XXX.*;
import XXX.*;
public class GetConnection
{
    private final String STRMAILSERVER = "XXX";
    public String STRUSERNAME = "XXX";
    public String STRPASSWORD = "XXX";
    private int intCount = 0;    
    XXX m_objMailMonitor = new XXX();
    XXX m_objMailAccessor = new XXX();
    public boolean getConn()
    {
        XXX c_authProcessResult = m_objMailAccessor.XXX(STRMAILSERVER, STRUSERNAME, STRPASSWORD);        
        if ("Success".equals(c_authProcessResult.toString()))
        {
            ARProcessResult c_monProcessResult = m_objMailMonitor.start();
            if ("Success".equals(c_monProcessResult.toString()))
            {
                System.out.println("both started");
                return true;
            }
            else
            {
                System.out.println("Monitor not started");
                return true;
            }
        }
        else
        {
            return false;
        }
    }    
    public static void main(String[] args)
    {
        GetConnection objGetConnection = new GetConnection();
        if (objGetConnection.getConn())
        {
            System.out.println("Connected");
        }
        else
        {
            System.out.println("not connected");
        }
    }
}
其中“XXX”代表自己写的其他类。
编译通过
运行时报错如下:
java.lang.NoClassDefFoundError: javax/mail/MessagingException
at GetConnection.
(GetConnection.java:14)
at GetConnection.main(GetConnection.java:42)
Exception in thread "main" 
一般找不到包或者类定义的错误会在编译时就能发现,怎么拖到了运行时?
该被查找的类定义在当前执行类编译时存在,却无法再找到。 
楼上的能否详细点,不是很清楚你的意思
设置jdk的安装目录,如果不设这个变量的话,这些软件包很可能找不到javac.exe在哪里。比如ant就需要通过这个环境变量来确定javac.exe的路径来执行compile task。这个环境变量的值就是你的jdk安装目录。如果你的jdk装在c:/jdk1.42,那么“c:/jdk1.42”就是JAVA_HOME的值。 2--path=E:/J2SDK/bin;E:/J2SDK/jre/bin     classpath=.;E:/J2SDK/lib;E:/J2SDK/lib/tools.jar   3--如果出现以下异常: Exception in thread "main" java.lang.NoClassDefFoundError:  最好把你的class声明为public,并且和你的文件名相同.     如果第二个程序能够成功运行则可能有一下问题:     (1)classpath是否设置正确.     (2)你执行编译和运行的拼写是否正确.
恩,我发现在C盘根目录下有j2sdk1.4.2_03安装文件夹
在Program Files文件夹下有Java文件夹,里面有一个Java运行环境
把其中的ext文件夹内容统一后,顺利运行
谢谢楼上的了
别客气