Newsgroup: it.comp.java
Titolo: Non esegue niente

Lanciando "Java nomefile" dal promt segnala sempre errore anche con "Ciao 
Mondo".
L'unico modo per fare eseguire č spostarsi nella dir dove c'č il file .class 
e lancisrlo da lě. E normale che sia cosě oppure bisogna configurare 
qualcosa?
C:\Documents and Settings\Utente\Desktop\Java\test\Ok>java pippo
Exception in thread "main" java.lang.NoClassDefFoundError: pippo
Caused by: java.lang.ClassNotFoundException: pippo
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)

 
Devi imparare ad usare il classpath.
Luca

 
-- 
Andrea Francia
http://andreafrancia.blogspot.com/2008/06/relazioni-molti-molti-con-jpa.html

 il nome fully qualified name della classe.
Ho scritto male, ho lanciato
"C:\Documents and Settings\Utente\Desktop\Java\test\Ok\java pippo.class" e 
dà errore
Se invece faccio:
cd "C:\Documents and Settings\Utente\Desktop\Java\test\Ok"
java pippo.class
così funziona, e funziona anche se lo lancio da NetBeans

 dà errore
Ahia! Ti mancano anche conoscenze sull'uso del prompt dei comandi.
Non saprei cosa indicarti per acquisirle.
Scrivendo:
"C:\Documents and Settings\Utente\Desktop\Java\test\Ok\java pippo.class"
Cerchi di avviare un ipotetico eseguibile che si chiama
	java pippo.class
contenuto nella cartella
	C:\Documents and Settings\Utente\Desktop\Java\test\Ok\
Dato che hai messo le virgolette l'interpreta pensa che deve cercare un 
file che contiene uno spazio nel suo nome. Il comando funzionerebbe per 
esempio se ci fosse un file chiamato
	java pippo.class.exe
nella cartella.
Dato che non c'e' ti da errore.
Se avessi scritto senza virgolette:
C:\Documents and Settings\Utente\Desktop\Java\test\Ok\java pippo.class
Non andava bene lo stesso, in pratica avresi chiesto al tuo interprete:
Vammi a prendere il programma java.exe (o .bat, o .cmd, etc.) dentro la 
directory "C:\Documents and Settings\Utente\Desktop\Java\test\Ok\" 
avvialo passandogli come parametro "pippo.class".
Se scrivevi
	cd C:\Documents and Settings\Utente\Desktop\Java\test\Ok
	java pippo.class
Non andava bene lo stesso perché la parte .class non devi metterla.
-- 
Andrea Francia
http://www.andreafrancia.it/

 Non andava bene lo stesso perché la parte .class non devi metterla.
Così funziona, con o seza .class non cambia niente, è implicito. 

 Così funziona, con o seza .class non cambia niente, è implicito. 
Mi sembra strano che funzioni con anche .class, cmq il modo giusto è 
senza .class.



Ok, ma tornando al problema principale, come mai così funziona:
cd "C:\Documents and Settings\Utente\Desktop\Java\test\Ok"
java pippo
e invece così dà errore:
java "C:\Documents and Settings\Utente\Desktop\Java\test\Ok\pippo"
non dovrebbe essere la stessa cosa? 

 non dovrebbe essere la stessa cosa?
Quando chiami java gli devi passare la classe, non il file (come ti ha detto 
Andrea prima)
Quindi la (1) è ok perchè fai java + NOME_DELLA_CLASSE (e infatti non devi 
mettere il .class, in quanto ripeto non gli devi dare il nome di un file ma 
di una classe)
Se crei un package allora devi utilizzare piu' o mendo il modo 2, 
identificando la classe e la sua posizione nel packag. Es
package a.b.c.d.Ciao{
// bla bla con il main
Lo richiami posizionando la shell dei comandi nella root del package (la 
cartella che contiene la cartella "a") e lanciando java a.b.c.d.Ciao (ovvero 
java + percorso.di.dove.vado.a.prendere.la.classe + CLASSE)
Ciao 


No!
Il motivo è che hanno deciso così.
Leggiti la pagina di manuale relativa:
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html


 ma di una classe)
Ma anche nel (2) faccio java + NOME_DELLA_CLASSE (infatti "pippo" sarebbe 
"pippo.class") però lo scrivo mettendo tutto il percorso completo, non 
dovrebbe essere la stessa cosa? Di solito per lanciare un qualunque file 
sono due comandi equivalenti 


Ok, ci riprovo.
d: Come si chiama la classe:
r: pippo.
d: C:C:\Documents and Settings\Utente\Desktop\Java\test\Ok e tutti i 
caratteri del mondo fa parte del nome della classe?
r: no
Ecco svelato l'arcano :)
ps: Tu non lanci un file. Dici a Java di lanciare la CLASSE pippo. 
pippo.class non è un programma, ma sono le istruzioni che Java (che è un 
programma) deve eseguire. 

 
Che pazienza che hai!


> Che pazienza che hai!
Glassie ;P
Senti, a parte che mi sono accorto solo ora che mi stavi aiutando sul 
problema del newton troncato su *.ingegneria (piccolo il mondo ;P)....mo ci 
provo e te la butto li....mi sembra di aver capito che te il programma lo 
hai fatto....io ormai ci ho rinunciato e porterņ solo la teoria, ma non č 
che mi potresti passare il codice che hai prodotto, in modo che gli possa 
dare un'ochiata? (non č scopiazzo, giurin giurello :) )

 programma) deve eseguire.
Ok, penso di avere capito come ragione Java anche se non ne capisco 
l'utilità.
Scusate ma è la prima volta in oltre 20 anni che trovo diverso indicare un 
nome di un file tramite tutto il percorso e spostandosi all'interno della 
directory
Grazie comunque della pazienza.


E daje...non passi il nome di un file, ma di una CLASSE !!!!!!
Java non compila il codice che scrivi in un file eseguibile, ma in una serie 
di istruzioni, racchiuse in una o più classi, che vengono eseguite dal 
programma java.
Quando tu scrivi "java pippo" tu stai dicendo "ehi ja,a fai quello che c'è 
scritto nella CLASSE pippo!". (e NON "ehi java, leggi il FILE pippo")
A quel punto java inizia a cercarsi la CLASSE pippo. Cerca in una variabile 
di sistema chiamata CLASSPATH tutte le cartelle dove potrebbe trovare la 
classe pippo, compreso il path ".", che si traduce con "qui".
Quindi:
"java pippo" = "ehi Java, esegui il codice contenuto nella classe pippo, che 
sta qui da dove ti sto chiamando (e cercati da solo il file corrispondente), 
oppure vattela a cercare nella variabile CLASSPATH"
E come fa java a sapere quale file deve usare? Ecco capito perchè una classe 
si deve chiamare COME il nome del file nella quale è scritta...quindi, non 
passi a java un file ma una classe. 

 dare un'ochiata? (non è scopiazzo, giurin giurello :) )
L'ho fatto anni fa, se lo trovo ti faccio sapere.
Pero' l'ho fatto in fortran.


 Pero' l'ho fatto in fortran.
Ah, maledetto :( ....ma perchè per queste cose tutti usano il fortran?
Allora non fa niente, grazie mille lo stesso, ho già trovato vario codice in 
fortran, ma non lo conosco e non ho tempo di mettermici... grazie mille di 
nuovo! 


Perché il Fortran (dicono) è più veloce per le applicazioni di number 
crunching. Quando fai programmino dell'esame non te ne accorgi, ma 
(dicono) che se fai applicazioni pesanti te ne accorgi.
In piu' (mi dicono) che occupa meno memoria che il matlab.
Avevo letto che il Fortran ha il vantaggio che il linguaggio è proprio 
pensato per essere ottimizzato per fare conti.
Non posso entrare nel dettaglio perché non ne so, pero' avevo letto che 
per come è fatto il linguaggio il compilatore può fare una serie di 
assunzioni sul codice che gli permettono una ottimizzazione spinta 
soprattutto in architetture parallele.
Tutto per sentito dire.
