My Blog
Java.Lang.NoClassDefFoundException
Γιατιιιιιιιί???? γιατί No Definition Found για την κλάση ? Αφού το πέρασα το jar αρχείο στον φάκελο της java με τα υπόλοιπα jar-ακια...και ο compiler βρίσκει και τα import που κάνω χωρίς να πετάει κανένα error ή warning!!
ΑΑΑΑΑαααααα....
Μην σκάτε την έχω βρει την λύση...Το παραπάνω ξέσπασμα είναι Έγω πριν μερικά χρόνια όταν ακόμα το έψαχνα το θέμα με τον προγραμματισμό..και πειραματιζόμουν...Γιατί αυτό που κατάλαβα είναι πως όσο περισσότερο κώδικα γράφεις τόσο καλύτερα μαθαίνεις και τόσο πιο εφυή τον κάνεις να είναι!!
Αλλά το συγκεκριμένο error με είχε βασανίσει αρκετά στις αρχές αν και τελικά λύνεται πολύ απλά. Αν το έχετε πάθει αλλά δεν έχετε βρει ακόμη την αιτία συνεχίστε να διαβάζετε και θα βγάλετε αυτό το μικρό χαζο-εμπόδιο από τον κωδικά σας...και όλα θα δουλεύουν ρολόϊ.
Καταρχάς αυτό συμβαίνει όταν η java δεν μπορεί να βρει για να φορτώσει τον “ορισμό” (definition) της κλάσης που της λέτε να καλέσει από το πακέτο!
Όταν θέλετε να χρησιμοποίησετε ένα εξωτερικό πακέτο τότε αυτό που κάνουμε είναι να το αντιγράφουμε στον φάκελο της java και μετά να το καλούμε μέσα από τον κώδικα. Στα windows συγκεκριμένα το αντιγράφουμε στον φάκελο extensions και του jdk αλλά και του jre. Ο πρώτος χρησιμοποιήται από τον compiler ενώ ο δεύτερος είναι το runtime enviroment και χρησιμοποιήται από το λειτουργίκο για να τρέχει εφαρμογές java.
Αν όμως το error παρουσιαστεί ακόμη και τότε...σημαίνει πως η java δεν μπορεί να βρει το συγκεκριμένο πακέτο και τότε θα πρέπει να της το υποδείξετε εσείς. Αυτό μπορεί να γίνει απλά μέσα από τον compiler που χρησιμοποιήτε!
Για παράδειγμα στον bluej ανοίγετε το παράθυρο των επιλογών και πηγαίνετε στην καρτέλα libraries και από εκεί κάνετε add το jar αρχείο που θέλετε να χρησιμοποίησετε για το πρόγραμμα. Επανεκινήτε τον bluej και είστε κομπλέ! (τουλάχιστον από το συγκεκριμένο exception...)
Βέβαια εγώ δουλεύω σε Mac όπου υπάρχει ένας φάκελος με τα extensions της java και βρίσκεται στο System/Library/java/extensions/...αλλά τα jar αρχεία που χρησιμοποιώ για τα προγραμματά μου δεν τα περνάω εκεί...αλλά σε φάκελο μέσα στο πρόγραμμα και λέω στην java που να τα βρει όπως περιγράφω και παραπάνω.
Πέμπτη, 17 Φεβρουαρίου 2011