java (forse OT)

Salve a tutti.
Sto cercando di avvicinarmi ai primi rudimenti di Java.
Con vim ho scritto il programma "Ciao.java":

class Ciao
{public static void main(String args)
        {System.out.println("Ciao ");
        }
}

Dopo di che l'ho compilato con javac e l'ho lanciato con java, ma
il risultato non corrisponde alle aspettative. Qualcuno avrebbe tempo di
spiegarmi dove ho cazzolato?

paolo(a)bolide:~> javac Ciao.java
paolo(a)bolide:~> java Ciao
Exception in thread "main" java.lang.NoClassDefFoundError: Ciao
   at gnu.java.lang.MainThread.run (libgcj.so.7)
Caused by: java.lang.ClassNotFoundException: Ciao not found in
gnu.gcj.runtime.SystemClassLoader{urls=,
parent=gnu.gcj.runtime.ExtensionClassLoader{urls=, parent=null}}
   at java.net.URLClassLoader.findClass (libgcj.so.7)
   at java.lang.ClassLoader.loadClass (libgcj.so.7)
   at java.lang.ClassLoader.loadClass (libgcj.so.7)
   at java.lang.Class.forName (libgcj.so.7)
   at gnu.java.lang.MainThread.run (libgcj.so.7)
paolo(a)bolide:~>

Grazie e ciao,
Bep

beppebz schrieb:

Salve a tutti.
Sto cercando di avvicinarmi ai primi rudimenti di Java.
Con vim ho scritto il programma "Ciao.java":

class Ciao
{public static void main(String args)
        {System.out.println("Ciao ");
        }
}

Dopo di che l'ho compilato con javac e l'ho lanciato con java, ma
il risultato non corrisponde alle aspettative. Qualcuno avrebbe tempo di
spiegarmi dove ho cazzolato?

paolo(a)bolide:~> javac Ciao.java
paolo(a)bolide:~> java Ciao
Exception in thread "main" java.lang.NoClassDefFoundError: Ciao
   at gnu.java.lang.MainThread.run (libgcj.so.7)
Caused by: java.lang.ClassNotFoundException: Ciao not found in
gnu.gcj.runtime.SystemClassLoader{urls=,

Sembra che non trovi la classe Ciao.

Di default dovrebbe avere la directori attuale (.) nel CLASSPATH. javac
ti ha messo la classe Classs.class nella tua home? E hai eseguito
veramente java dalla tua home?

Se l'hai fatto java della distribuzione GNU che stai utilizzando non
include la direttori attuale nella CLASSPATH di default.

Allora puoi usare l'opzione -cp (se ricordo bene) per dire a java, dove
si trovano le tue class. Dovrebbe essere:

java -cp . Ciao

Happy hacking!
Patrick

Salve a tutti.
Sto cercando di avvicinarmi ai primi rudimenti di Java.
Con vim ho scritto il programma "Ciao.java":

class Ciao
{public static void main(String args)
        {System.out.println("Ciao ");
        }
}

Dopo di che l'ho compilato con javac e l'ho lanciato con java, ma
il risultato non corrisponde alle aspettative. Qualcuno avrebbe tempo di
spiegarmi dove ho cazzolato?

paolo(a)bolide:~> javac Ciao.java
paolo(a)bolide:~> java Ciao
Exception in thread "main" java.lang.NoClassDefFoundError: Ciao
   at gnu.java.lang.MainThread.run (libgcj.so.7)
Caused by: java.lang.ClassNotFoundException: Ciao not found in
gnu.gcj.runtime.SystemClassLoader{urls=,
parent=gnu.gcj.runtime.ExtensionClassLoader{urls=, parent=null}}
   at java.net.URLClassLoader.findClass (libgcj.so.7)
   at java.lang.ClassLoader.loadClass (libgcj.so.7)
   at java.lang.ClassLoader.loadClass (libgcj.so.7)
   at java.lang.Class.forName (libgcj.so.7)
   at gnu.java.lang.MainThread.run (libgcj.so.7)
paolo(a)bolide:~>

Grazie e ciao,
Bep

E se chiami gnu java direttamente (senza java/javac wrappers)?

  gcj -C Ciao.java
  gij Ciao

E se lo compili in nativo?

  gcj --main=Ciao Ciao.java -o Ciao
  ./Ciao

(entrambi testati ok col tuo sorgente sulla mia Fedora 5).

Bye, Chris.

Patrick Ohnewein ha scritto:

Sembra che non trovi la classe Ciao.

Di default dovrebbe avere la directori attuale (.) nel CLASSPATH. javac
ti ha messo la classe Classs.class nella tua home? E hai eseguito
veramente java dalla tua home?
  

Ehm, come controllo il classpath? javac mi ha messo il file Ciao.class
nelle mia home. Non vedo Class.class. Sì, ho eseguito veramente java
dalla mia home.
Ciao e grazie,
Bep

NO, ASPETTA: con
$-> java -cp . Ciao
funziona.
Grazie infinite. Grazie anche a Chris: provo anche come mi suggerisci
tu. Ciao,
Bep

beppebz schrieb:

Ehm, come controllo il classpath?

Prova a vedere se hai una variabile CLASSPATH settata:

echo $CLASSPATH

Non dovrebbe esistere affatto!

set | grep CLASSPATH

Non ti dovrebbe dare alcun risultato. Neanche una variabile vuota!!!

Normalmente l'interprete java allora assume un valore "." per il
CLASSPATH. Forse GNU java non lo assume o è stata settata CLASSPATH con
un valore errato (anche vuoto è errato :wink: )

Se setti CLASSPATH come "." probabilmente ti funziona:

export CLASSPATH="."
java Ciao

Happy hacking!
Patrick