NoClassDefFoundError:如何确定找不到哪个类定义

时间:2011-11-14 20:01:14

标签: java noclassdeffounderror

我正在尝试运行tomcat应用程序,但是当我尝试转到应用程序时,我得到了:

  

java.lang.NoClassDefFoundError:无法初始化类ysl.util.Utils     ysl.util.Utils.executeQuery(Utils.java:186)
    ysl.util.Utils.getProperty(Utils.java:395)
    ysl.util.Utils.getProperty(Utils.java:383)
    ysl.util.YslMachineProperties.init(YslMachineProperties.java:76)
  ysl.util.YslMachineProperties.getTomcatImagesDirectory(YslMachineProperties.java:109)
    org.apache.jsp.YSLLogin_jsp._jspService(YSLLogin_jsp.java:70)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

我在网上发现了很多关于这个问题的引用 - 大多数人说在编译应用程序时有一个类在运行时不可用,我需要在java类路径中添加一些内容来查找它。但是我如何确定缺少哪个班级?

错误消息说Utils类无法初始化,但堆栈跟踪显示我们已进入类中的第二个方法,所以我认为该类已经初始化。当然,这不是无法找到定义的类,因为我们在堆栈跟踪中有行号信息。

触发错误的方法如下所示:

  

static public ResultSet executeQuery(String queryString)抛出SQLException {
         返回dbConnPool.executeQuery(queryString);

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

很可能Utils类正在尝试使用另一个在静态初始化期间不可用的类(这将是@BalusC指出的根本原因)。加载该类失败也会导致Utils失败,因此即使定义了Utils,它的依赖也不会。

答案 1 :(得分:0)

如果您使用的是oracle(ex Sun)java,请尝试运行:

java -verbose:class

http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html

下的更多选项

您将看到加载了哪些类。