Axelfc Δημοσ. 22 Νοεμβρίου 2004 Δημοσ. 22 Νοεμβρίου 2004 Εστω οτι εχω δυο classes την Α και την Β εκ των οποιων η Α ειναι abstract και η B ειναι η υλοποιηση της. Η Α βρισκεται στο package πχ gr.insomnia. Στην Α εχω: pacakage gr.insomnia; public abstract class A{ //variables //methods } Την κλαση Β σε ποιο φακελο πρεπει να τη βαλω; Στο C:\gr\insomnia η καπου αλλου; Χρειαζεται να ορισω και σε αυτη το ιδιο package; Εκτος απο το public class B extends A{...} χρειαζεται να κανω καποιο Import; Ευχαριστω προκαταβολικα.
Γηρυόνης Δημοσ. 22 Νοεμβρίου 2004 Δημοσ. 22 Νοεμβρίου 2004 Την κλαση Β σε ποιο φακελο πρεπει να τη βαλω; Στο C:\gr\insomnia η καπου αλλου; Χρειαζεται να ορισω και σε αυτη το ιδιο package; Όπου θέλεις' date=' δεν παίζει ρόλο που θα είναι. Εκτος απο το public class B extends A{...} χρειαζεται να κανω καποιο Import; Ευχαριστω προκαταβολικα. Αν η Β είναι σε κάποιο άλλο πακέτο ναι, αν είναι στο ίδιο όχι.
Axelfc Δημοσ. 22 Νοεμβρίου 2004 Μέλος Δημοσ. 22 Νοεμβρίου 2004 Αυτη τη στιγμη εχω τα παρακατω αρχεια: C:\gr\insomnia\Α.java κώδικας: pacakage gr.insomnia; public abstract class A{ //variables //methods } C:\B.java κώδικας: pacakage gr.insomnia; public class B extends A{ } Στο Classpath χρειαζεται να ορισω τη θεση καποιων απο αυτα τα δυο; πχ C:\ ή C:\gr\insomnia Στη συνεχεια πρωτα κανω compile την abstract και στη συνεχεια την κανονικη; Δοκιμασα και τους δυο φακελους στο classpath και αναφερει οτι δεν μπορει να βρει την abstract.
Cue Δημοσ. 22 Νοεμβρίου 2004 Δημοσ. 22 Νοεμβρίου 2004 Καταρχήν, όσες κλάσεις (.class αρχεία) είναι δηλωμένες σε κάποιο πακέτο πρέπει να βρίσκονται και στο ανάλογο directory structure! (εν αντιθέσει με τα .java αρχεία που είναι τα source και που δεν είναι απαραίτητο) Άρα η compiled κλάση B (B.class) στην προκειμένη περίπτωση, πρέπει επίσης να είναι στο C:\gr\insomnia\ μαζί με το αρχείο A.class Compile στην ουσία πρέπει να κάνεις πρώτα την κλάση A και μετά την B γιατί στην ουσία η B έχει αναφορά στην A άρα αν το κάνεις ανάποδα, απλά η Α δε θα βρίσκει την Β!
Axelfc Δημοσ. 22 Νοεμβρίου 2004 Μέλος Δημοσ. 22 Νοεμβρίου 2004 Κατα λαθος εγραψα τα αρχεια με καταληξη class στο προηγουμενο post μου. :oops: Τωρα το διορθωσα. To A.java το κανω κανονικα compile. Οταν παω ομως να κανω compile το Β.java το οποιο βρισκεται στο C:\ μου βγαζει οτι δεν μπορει να βρει την A, ενω την εχω κανει απο πριν compile. Γι'αυτο ρωταω αν πρεπει να γραψω κατι στο classpath για να την εντοπιζει ο compiler. Αυτα που δοκιμασα δεν επιασαν... Επισης δοκιμασα τον παρακατω κωδικα για το B.java import gr.insomnia.*; class B extends A { } αλλα και παλι δεν βρισκει την A.
Cue Δημοσ. 22 Νοεμβρίου 2004 Δημοσ. 22 Νοεμβρίου 2004 Όπως είπε και ο Γηρυόνης Εκτος απο το public class B extends A{...} χρειαζεται να κανω καποιο Import; Ευχαριστω προκαταβολικα. Αν η Β είναι σε κάποιο άλλο πακέτο ναι' date=' αν είναι στο ίδιο όχι.[/quote'] Συνεπώς δε χρειάζεται το ιmport! Και όπως είπα και εγώ Καταρχήν' date=' όσες κλάσεις (.class αρχεία) είναι δηλωμένες σε κάποιο πακέτο πρέπει να βρίσκονται και στο ανάλογο directory structure [/quote'] Άρα βάλε το αρχείο B.java στο C:\gr\insomnia\ και κάντο compile
Axelfc Δημοσ. 22 Νοεμβρίου 2004 Μέλος Δημοσ. 22 Νοεμβρίου 2004 Εβαλα και τα δυο αρχειa Α.java , B.java στο φακελο C:\gr\insomnia\ οπως ειπατε. Κανω compile το A.java, οκ. Και παλι ομως οταν παω να κανω compile το B.java μου βγαζει cannot find symbol A class...
Cue Δημοσ. 22 Νοεμβρίου 2004 Δημοσ. 22 Νοεμβρίου 2004 Το compile πρέπει να το κάνεις από το root του directory structure όπως είναι δηλωμένο σαν πακέτο. Πήγαινε στο C:\ και δώσε > javac gr\insomnia\B.java
Γηρυόνης Δημοσ. 22 Νοεμβρίου 2004 Δημοσ. 22 Νοεμβρίου 2004 Εκτός από αυτό που λέει ο Cue μπορείς να κάνεις και το άλλο. Αν υποθέσουμε ότι και τα δύο αρχεία (A.java και B.java) βρίσκονται στο C: μπορείς να κάνεις javac A.java -d . και αν έχεις ήδη θέσει το classpath javac -classpath %CLASSPATH%. B.java
Axelfc Δημοσ. 23 Νοεμβρίου 2004 Μέλος Δημοσ. 23 Νοεμβρίου 2004 Και παλι δεν λειτουργησε τιποτα απο τα δυο που μου ειπατε. Thanks για τη βοηθεια παντως. θα το ψαξω μπας και βγαλω ακρη...
ancalagon Δημοσ. 23 Νοεμβρίου 2004 Δημοσ. 23 Νοεμβρίου 2004 Εχουμε και λεμε Είμαστε στο C:\ Εχουμε τα C:\gr\insomnia\Α.java,C:\gr\insomnia\B.java Τα εξής δικαιολογημένα και σωστά λειτουργούνε: javac gr/insomnia/A.java javac gr/insomnia/B.java ή(το javac είναι αρκετά έξυπνο ώστε να μην ενοχλείται απο αυτά) javac gr\insomnia\A.java javac gr\insomnia\B.java (Συνιστώμενη η πρώτη μορφή μια και είναι OS-independent σύμφωνα με την java και θα βοηθάει να ακολουθείς μία σύμβαση όταν γράφεις και κάνεις compile.) Τώρα ο πιο πιθανός λόγος που δεν παίζει ? Εχεις πειράξει το classpath ως μεταβλητή. Γενικώς είναι κακή ιδέα να το κάνεις αυτό(μιλάω εκ πείρας) κυρίως γιατι ξεχνάς να θέσεις μέσα πράγματα όπως paths άλλων projects , current(.) κτλ και μετά πάντα κάτι δεν παίζει. Σημειωτέον απο την στιγμή που θα αλλάξεις μία μεταβλητή απο το System πρέπει να κάνεις restart το cmd ώστε να την δεί. Εάν κάνεις την αλλαγή μέσα απο το ίδιο το cmd προφανώς δεν χρειάζεται αλλά η αλλαγή θα ισχύει μόνο για εκείνη την εκτέλεση του cmd στην οποία έχεις αλλάξει την μεταβλητή
Axelfc Δημοσ. 23 Νοεμβρίου 2004 Μέλος Δημοσ. 23 Νοεμβρίου 2004 Και παλι cannot find symbol class A βγαζει με αυτα που μου ειπες ancalagon. Χρησιμοποιω win98 και στο autoexec.bat στο classpath εχω ορισει μονο το current directory δλδ SET CLASSPATH="." Οποιαδηποτε αλλαγη στο autoexec.bat μπορει να γινει δεκτη απο το συστημα με την εντολη c:\autoexec.bat σε Command Prompt. Παιζει καποιο ρολο που ειναι abstract η κλαση Α; Δεν το νομιζω. Και στα δυο αρχεια εχω στην αρχη το ιδιο package gr.insomnia;
Γηρυόνης Δημοσ. 23 Νοεμβρίου 2004 Δημοσ. 23 Νοεμβρίου 2004 Πες μας λίγο 1) Πού είναι A.java και B.java αρχεία (πες μας όλο το path) 2) Τί σου βγάζει όταν κάνεις set CLASSPATH 3) Ποιο είναι το package και στα δύο αρχεία 4) Τί μήνυμα λάθους σου βγάζει;
Axelfc Δημοσ. 23 Νοεμβρίου 2004 Μέλος Δημοσ. 23 Νοεμβρίου 2004 Λοιπον εχουμε και λεμε: Χαριν ευκολιας αντικατεστησα τα ονοματα των αρχειων και τα packages με τα Α.java , B.java , gr.insomnia. Στην πραγματικοτητα οριστε τι εχω: C:\gr\auth\ee\dsproject\a1\Α1Sparse.java το οποιο εχει τον κωδικα: package gr.auth.ee.dsproject.a1; public abstract class A1Sparse{...} και το αρχειο C:\gr\auth\ee\dsproject\a1\Sparse.java το οποιο εχει τον κωδικα: package gr.auth.ee.dsproject.a1; public class Sparse extends A1Sparse {...} Παραλειπω τα ενδιαμεσα γιατι ειναι παρα πολλα. Οπως βλεπετε η Α1Sparse.java ειναι μια abstract κλαση τα στοιχεια της οποιας υλοποιουνται απο την Sparse.java. Στο autoexec.bat εχω ορισει τα εξης (ειπαμε win98, οχι XP): SET PATH="C:\Program Files\Java\jdk1.5.0\bin" SET CLASSPATH="." Επειτα απο Command Prompt πηγαινω στο φακελο C:\gr\auth\ee\dsproject\a1 και εκτελω: javac A1Sparse.java Δημιουργειται σωστα η A1Sparse.class Στη συνεχεια εκτελω: javac Sparse.java και παιρνω το παρακατω μηνυμα λαθους: C:\gr\auth\ee\dsproject\a1>javac Sparse.java Sparse.java:6: cannot find symbol symbol: class A1Sparse public class Sparse extends A1Sparse { με ενα βελακι να δειχνει στο A1Sparse. Δοκιμασα και απο το C:\ να εκτελεσω javac gr\auth\ee\dsproject\a1\Sparse.java αλλα και παλι πηρα το ιδιο μηνυμα λαθους.
Cue Δημοσ. 23 Νοεμβρίου 2004 Δημοσ. 23 Νοεμβρίου 2004 Να ρωτήσω κάτι σχετικό/άσχετο? Γιατί δε χρησιμοποιείς κάποιο IDE για το development?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.