2016-10-04 7 views
2

Я выполнил основной класс и получил следующую ошибку и трассировку.NoClassDefFoundError eventhough class in in the same folder

Это консольная команда:

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 Трассировка *

./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