PDA

View Full Version : AIUTO URGENTE!!! Importare packages in java


anx721
19-02-2003, 03:05
Salve a tutti.

Sto raggruppando vari file di un'applicazione in dei package, ma le cose non mi funzionano... Vorrei allora chiedere a chi ne sa di più alcune cose su come posizionare i packages e chi può fare l'import di che cosa.

Supponiamo di avere due sottodirectory uno e due di una cartella C:

...........C
........./...\
.......uno.due

uno contiene file con dichiarazione di package 'package uno;' e due contiene file con dichiarazione di package 'package due;'. Se nei file della cartella uno includo l'istruzione 'import due.*' il compilatore dice di non trovare il package due. Ho visto che le uniche volte in cui il package due è trovato è quando la cartella che lo contiene è una sottocartella di uno, ovvero dovrei avere una struttura di sottopackage:

........C
......../
......uno
......./
.....due


Ma stanno proprio cosi le cose? Cioè è questo l'unico caso in cui l'import funziona? O c'è qualche altro problema? Centra qcosa col classpath? (dal file autoexec.bat: SET PATH=C:\Programmi\jdk1.2.2\bin;%PATH%). Il fatto è che anche cosi le cose non funzionano, come ho provato col seguente esempio.

Supponiamo di voler definire un pakage b e un sottopackage c.
Ho creato la directory a con un file one.java:

////////file a/one.java/////////////

import b.*;

public class one{

.......public static void main(String[] args){
................one o = new one();
................o.executeOne();
}

.........public void executeOne(){
.................System.out.println("one");
.................two t = new two();
..................t.executeTwo();
..........}

}

//////////////////////////////////////


nella directory a ho creato la directory b con un file two.java:

/////////////////file a/b/two.java////////////////////

package b;

import b.c.*;

public class two{

..........public void executeTwo(){
......................System.out.println("two");
......................three o = new three();
......................o.executeThree();
...........}

}

////////////////////////////

nella directory b ho creato la directory c con un file three.java:

/////////////////file a/b/c/three.java////////////////////

package b.c;


public class three{

.............public void executeThree(){
.......................System.out.println("three");
..............}
}

////////////////////////////

Se compilo three.java va tutto bene, ma quando compilo two.java ho l'errore:

Package b.c not found in import: import b.c*;

Per riuscire a compilare ho visto che in a/b/c/three.java devo sosituire la dichiarazione di package 'package b.c;' con 'package c;' e allo stesso tempo sostituire in a/b/two.java 'import b.c*' con 'import c.*'. Così le cose funzionano...almeno fino alla compilazione. Se provo ad esegurie one.java dalla directory a ho come otput:

one
two
java.lang.NoClassDefFoundError: c/three :muro:


Questo è quanto...spero di aver descritto bene il problema e soprattutto spero che qualcuno mi sappia dare una soluzione...è da stamattina che ci sto lottando..e sono le 4 di notte...tra l'altro tra due giorni devo consegnare il programma!


Grazie a tutti, ciao!

cn73
19-02-2003, 08:42
Il claaaaaassssspathhhhhhhhhh!!!!!!! :D
Che non centra nulla col PATH!

MA all'università non ve le insegnano ste cose??? :muro:

Deve puntare alla directory padre di tutti i packages ;) Tutto funzionerà alla grande poi!