2016-10-04 34 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

相關問題