NoClassDefFoundError eventHough在同一个文件夹中的类

时间:2016-10-04 12:46:55

标签: java classpath

我执行了一个主类并得到了以下错误和跟踪。

这是控制台命令:

  

java -cp。 net.sf.tinyPayroll.Main

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.hsqldb.Trace
    at org.hsqldb.Database.reopen(Unknown Source)
    at org.hsqldb.Database.open(Unknown Source)
    at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
    at org.hsqldb.DatabaseManager.newSession(Unknown Source)
    at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
    at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
    at org.hsqldb.jdbcDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at net.sf.tinyPayroll.dao.DBConnector.connectDataFile(DBConnector.java:88)
    at net.sf.tinyPayroll.dao.DBConnector.<init>(DBConnector.java:72)
    at net.sf.tinyPayroll.dao.DBConnector.getInstance(DBConnector.java:106)
    at net.sf.tinyPayroll.model.DataFile.<init>(DataFile.java:53)
    at net.sf.tinyPayroll.Main.main(Main.java:42)

但是,所有必需的类都在同一个文件夹中。

这是在同一文件夹中提取并可用的文件(整个库以提取的形式提供)。

  找到。 -name Trace *

./org/hsqldb/Trace.class
./org/hsqldb/util/Traceable.class

2 个答案:

答案 0 :(得分:2)

你的例外是:

  

NoClassDefFoundError无法初始化课程org.hsqldb.Trace

这并不意味着它无法在类路径中找到类org.hsqldb.Trace,这意味着由于某种原因该类无法初始化

通常意味着在尝试将值分配给静态字段时或尝试在静态块中执行某些代码时抛出RuntimeException

例如,我们将在下一个案例中得到这样的问题:

class Trace {

    static MyClass foo = MyClass.newInstance(); // If it fails while calling newInstance

    static {
        SomeClass.init(); // If it fails while calling SomeClass.init()
    }
    ...
}

答案 1 :(得分:1)

正如Nicolas所说,这并不意味着它无法在类路径中找到类org.hsqldb.Trace,这意味着由于某种原因无法初始化类。 我已检查过代码(这可能会根据版本进行更改)http://grepcode.com/file/repo1.maven.org/maven2/hsqldb/hsqldb/1.8.0.1/org/hsqldb/Trace.java 在类中它有一些静态块进行一些处理。很可能在您的类路径中缺少一些资源