Newsgroup: it.comp.java
Titolo: Errore java impossibile trovare la classe

Buonasera,
ho cominciato da poco a studiare java. Mi perdonerete quindi se si 
tratta di questioni per voi trite e ritrite ma vi giuro che prima di 
venire qui a chiedere ho cercato parecchio in rete senza trovare una 
risposta per me comprensibile.
Ho installato oracle JDK7 su Ubuntu 11.1 64bit (che gira su virtualbox) 
nel percorso /usr/local/, e già qui ho tribolato per via dell'openjdk 
già installato nel sistema. Comunque da questo punto di vista ora è 
tutto ok perché se digito java -version ottengo 1.7 etc...
Ho settato le path tramite modifica del file .bashrc del mio utente in 
questo modo:
 
PATH=$PATH:/usr/local/jdk1.7.0/bin
JAVA_HOME=/usr/local/jdk1.7.0
CLASSPATH=/usr/local/jdk1.7.0
export PATH JAVA_HOME CLASSPATH
 
vengo al dunque se provo ad eseguire una semplice classe appena creata 
ottengo l'errore impossibile trovare la classe. Ovviamente la classe 
c'e' ed è nel percorso in cui ho digitato il comando java nomeclasse
Se invece la eseguo all'interno di jedit tramite il plugin console va 
tutto bene.
Ho trovato in rete questo comando e così funziona:
java -cp . nomeclasse
me la esegue.
Ma non capisco perché non funziona nel modo classico.
Qual'e' il problema?
Grazie.
 
 
 


Prova ad eseguire java nomeclasse nella directory che contiene 
nomeclasse.class.
 

 nomeclasse.class.
 
E' quello che ho fatto fin dall'inizio.
 

 problema?
 
Non si può dire perché non hai incollato l'errore ottenuto né il comando 
che hai dato.

 Ma non capisco perché non funziona nel modo classico.
 
quale sarebbe il metodo classico scusa?
 

il 26.10.2011 21:05, Scrive Jamie 83633120:

Se il classpath e' quello sopra, non trovera' mai alcuna classe. Nel 
classpath occorre citare i file jar o zip che contengono la radice dei 
package delle classi, e/o delle directory che contengono la radice dei 
package.
Per fare un esempio, se devi eseguire l'ipotetica classe 
org.pippo.HelloWorld convieni che occorre usare il comando:
java org.pippo.HelloWorld
la classe dovrà trovarsi nel classpath, ovvero in una delle directory 
citate nella variabile d'ambiente o nell'equivalente argomento 
-classpath del comando java. Cio' significa che nel classpath dovrà 
esistere una directory o un equivalente jar, che contenga il path 
relativo della classe, che nel caso d'esempio e':
org/pippo/HelloWorld.class
dove org/pippo/ rappresenta il package della classe.
Ci puo' essere il caso particolare, ormai deprecato, in cui la classe 
HelloWorld sia stata creata nel default package, ovvero non ha package, 
solo in questo caso particolare la directory che contiene il file 
HelloWorld.class dovra' essere citata nel classpath. Che e' il caso del 
tuo esempio:
java -cp . nomeclasse
se il placeholder "nomeclasse" non contiene punti ed il file 
nomeclasse.class e' nella directory corrente (caso del default package) 
allora il comando avrebbe funzionato, e' giusto che non fuzioni in tutti 
gli altri casi.
 
 
 
 

 gli altri casi.
 
Veramente lui dice che ha funzionato ;)
Il (suo) vero dubbio e' come mai non funzioni nel modo classico... il (mio) 
vero dubbio e' quale sia il modo classico!
 
Saluti
CarMas
 
 
 
 

 quale sarebbe il metodo classico scusa?
 
il champenoise!
 
 

 Se il classpath e' quello sopra, non trovera' mai alcuna classe.
 
il punto indica la directory corrente,
quindi se lui ha tutte le classi necessarie nella directory
ed esegue Java all'interno della stessa le trova.
 
 
 

 export PATH JAVA_HOME CLASSPATH
 
non conosco Ubuntu,
cosa fa questa istruzione?
 
 


Ehm scusate... per modo classico intendo digitare semplice java 
nomeclasse da terminale...e farlo ovviamente essendo posizionati nella 
directory dove c'e' la classe... (invece che java -cp . nomeclasse, che 
è il modo in cui adesso mi funziona).

 CLASSPATH=/usr/local/jdk1.7.0
 
Questo non serve a niente, sostituisci con:
 
CLASSPATH=.;
 
 
 

il 27.10.2011 14:10, Scrive Cino Salcic 83633120:

ROTFL

il 27.10.2011 14:22, Scrive Jamie 83633120:

Devi aggiungere . alla variabile d'ambiente classpath

il 27.10.2011 14:22, Scrive Cino Salcic 83633120:

Popola l'ambiente con le variabili PATH JAVA_HOME CLASSPATH

 è il modo in cui adesso mi funziona).
 
a partire da java 5 la directory corrente è inclusa di default nel
classpath, *salvo* *che* sia impostata la variabile CLASSPATH nel qual
caso deve essere inclusa esplicitamente. che è appunto il tuo caso.
rimuovi CLASSPATH (che peraltro così impostata non serve a nulla) e
hai risolto.
 
 

 il champenoise!
 
cin cin!

 CLASSPATH=.;
 
 
Fatto, e funziona, grazie!
L'istruzione di cui sopra (CLASSPATH=/usr/local/jdk1.7.0) e su cui molti 
mi hanno chiesto delucidazioni non me la sono inventata io ma era 
suggerita dal mio prof.
Appena possibile gli chiederò perché.
Ma se tolgo del tutto la riga CLASSPATH=.; che cosa succede? Perché ho 
letto che alcuni sconsigliano di settarla, per problemi di compatibilità 
coi browser che utilizzano plugin java (se ho ben capito).
 
Grazie a tutti.
 

 Ma se tolgo del tutto la riga CLASSPATH=.; che cosa succede?
 
nulla,
settare CLASSPATH=.; oppure non settare affatto il classpath
con le versioni recenti di Java non cambia nulla, finchè usi solo le
classi del JDK non ti serve altro, se invece in futuro ti servisse di
usare librerie di classi esterne, tipo il driver del database oppure
le classi per aprire fogli excel o generare pdf allora andrai a settare
per es per il driver di MySql qualcosa del tipo:
CLASSPATH=.;/usr/local/lib/mysql-connector-java-5.1.13-bin.jar;
che comunque puoi ottenere anche indicando il classpath direttamente
come hai già fatto:
Java -classpath .;/usr/local/lib/mysql-connector-java-5.1.13-bin.jar; 
miaclasse
 
 
 
 
 

 Ma se tolgo del tutto la riga CLASSPATH=.; che cosa succede?
 
succede che ti funziona lo stesso per la ragione che ho spiegato
nell'altro post.
la variabile di ambiente CLASSPATH è usata poco e ancor meno a livello
di impostazione globale essendo il classpath una impostazione
peculiare di ogni singola applicazione, per cui si preferisce usare la
linea di comando.
 
 
 
 

 miaclasse
 
Solo una cosa... attenzione al separatore... in linux [e quindi
nell'Ubuntu virtualizzato di Jamie] si usano i due punti invece che il
punto e virgola [cosi` come faceva per impostare la variabile PATH]...
altrimenti, cosi` scritto, risultano tre comandi separati... perche` in
linux il punto e virgola separa comandi diversi sulla stessa riga o in
uno script.
 
Ciao ciao
Claudio

 linea di comando.
 
 
Ok, grazie.
Avrei un'altra domanda che non c'entra niente col resto del discorso.
Perch� se installo jedit tramite il comando apt-get install mi installa 
una versione che non � la pi� recente (ovvero la 4.3)?
Come posso fare per aggiornarla alla 4.4 in maniera semplice?
 
Grazie.
 

 Come posso fare per aggiornarla alla 4.4 in maniera semplice?
 
Cerchi su web un repository per Ubuntu che offra la 4.4, lo aggiungi ai 
repository del tuo sistema e aggiorni.

 Come posso fare per aggiornarla alla 4.4 in maniera semplice?
 
http://www.jedit.org/index.php?page=download&platform=unix#option_two