Денс се борих малко с твоя проект, но не издържах и се отказвам за сега
Ще ти дам и аз няколко препоръки по реда на мъките ми.
Първо не е лошо да добавиш в readme-то инфо за зависимостите на проекта ти, тъй като библиотеките не са включени в проекта.
Примерно apache commons-io, derby и тнт. После няма да навреди един step by step как да го подкараме тоз нагазин. Таз база данни докато яподкарам ми посивяха, побеляха и па са оцветиха космите в ушите.
А докато се мъчех с derby ми направи впечатление един сериозен проблем който имаш с кода. Тез catch-клаузи не са, за да се принтират някви съобщения само, а за да се реагира на акана ситуация.
Примерно аз нямах jdbc driver и вместо да изтрещи и да умре апликацията само ми изписва една и съща грешка 3-4 пъти един след друг. Ето извадка от твоя код
try {
System.
out.
println("DBConection error: " + e.
getMessage()); }
return con;
}
try {
stmt = con().createStatement();
System.
out.
println("Statement error" + e.
getMessage()); }
return stmt;
}
На 12-ти ред в метода stmt() викаш con(). На него му прилошава като се извика DriverManager.getConnection на 3-ти ред, но вместо да припадка, той пищи, че нямал подходящ драйвър и щастлив връща null. Та stmt() получава като резултат на con() null и се опитва да изпълни createStatement() на тоз null. Естествено, че и това пищи с NullpointerException и влиза в catch блока изписва грешката, но и на тоз метод не му пука, че нищо не работи и си връща и той щастлив един null.
Но това не е всичко
Цялата верига всъщност тръгва от класа MainScreenController, метода initialize, който вика един след друг разни други методи дето не се изпълняват като хората, но той си продължава да ги вика. Чак на метода searching() крашва и то защото по някаква случайност в него не хващаш генерално Exception-и, а само SQLException-и и тъй като се получава NullpointerException апликацията крашва.
Подобен проблем имаш и в BackupDatabase. Там directoryExists() си му сложил, че хвърля IOException, но тоз ексепшън идва от FileUtils.copyDirectory, който викаш в copyFolder().
Получава се следното:
directoryExists() вика copyFolder(). Там изпищява някъв IOException, но ти в метода "обработваш" този ексепшън в catch блока, което означава че directoryExists() няма да го получи нивга.
Друг проблем тука е код като този
createDiectory();
copyFolder(source, destination);
Ами ако createDiectory даде грешка? И там хващаш всякакви видове ексепшъни и ги принтираш/обработавш на екрана. И въпреки че нямаш направена директория викаш copyFolder().
Та като цяло мрънкането ми е на тема exception-и. Попрочети малко за тях, за try-catch-throw блокове и тнт.
Хващай специфични видове грешки и то само ако ще ги обработваш смислено. Само да ги принтираш не е смислено обработване.
А дори и да решиш само да ги принтираш, то добави някаква допълнителна инфорамция, която ще ти помогне да разбереш къде се е случил проблема. При един NullpointerException всичко което се изписва е "null". Ходи търси от къде идва тоз надпис после
Колкото до структурата на кода и OOP мисля, че Wanderer ти е дал достатъчно насоки.