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!
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!