2016-10-04 27 views
2

我执行了一个主类,并得到以下错误和跟踪。NoClassDefFoundError事件虽然在同一文件夹中的类

这是控制台的命令:

java命令。 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跟踪*

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

也许是错误的权限? – talex

+0

如果你喜欢'java -cp“会怎么样。” ...' –

回答

1

正如萨科提到,这并不意味着它不能找到类org.hsqldb.Trace在类路径,这意味着该类不能由于某种原因被初始化。 我查过这段代码(这可能会根据版本的变化而变化)http://grepcode.com/file/repo1.maven.org/maven2/hsqldb/hsqldb/1.8.0.1/org/hsqldb/Trace.java 在这个类中它有一些静态块做一些处理。最有可能的一些资源缺失在你的课程路径

+0

当这个应用程序捆绑在一起时,构建工具已经将相关性提取到相同的Jar文件中。但是,只添加了.class文件。资源文件夹是空的,没有任何.properties文件。其中一个属性文件在Trace.java中使用 – Teddy

+1

令人惊讶的是,java没有提供“嵌套异常”/“由...引起”,这本来是非常有用的。 – Teddy

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() 
    } 
    ... 
} 
+0

我以为会有这样的情况造成的。所以,我认为这是另一回事。我会检查。 – Teddy

相关问题