PDA

View Full Version : [Java] Problemi da principiante con il mio primo package....


utrecht
17-02-2004, 10:27
Riporto il mio primo tentativo (molto base!!) per la creazione di un package e che ovviamente non mi funziona..... Il manuale di riferimento è 'Thinking in Java' di Bruce Eckel

Variabile d'ambiente: .;C:\java\bin
Nel file system ho predisposto la dir: com\ilmionome\simple
Ecco il file incriminato:

//: com:ilmionome:simple:Vector.java
// Creating a package.
package com.ilmionome.simple;
public class Vector
{
public Vector()
{
System.out.println("com.ilmionome.Vector");
}
}
---
Compilazione OK

Eseguo ed ecco l'errore:

Exception in thread "main" java.lang.NoClassDefFoundError: Vector (wrong name
com/ilmionome/simple/Vector)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java
3)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)

Mi sapreste aiutare? Grazie

PGI
17-02-2004, 12:39
Exception in thread "main" java.lang.NoClassDefFoundError: Vector (wrong name
com/ilmionome/simple/Vector)

Per "lanciare" un file class a cui hai assegnato un package devi dargli il "nome pienamente qualificato".

Nel tuo caso

java com.ilmionome.simple.Vector [invio]

il comando "java" deve essere lanciato dalla directory superiore a quella "com".

fgmac
17-02-2004, 13:17
Spero esista il main in quella classe perche' io non l'ho visto. Senza il main non ti partira' mai il programma.

cn73
17-02-2004, 13:24
Originariamente inviato da fgmac
Spero esista il main in quella classe perche' io non l'ho visto. Senza il main non ti partira' mai il programma.

ahi ahi PGI :D cmq avete ragione entrambi, l'errore segnalato da PGI sarebbe venuto dopo l'introduzione del main...

PGI
17-02-2004, 16:21
Whoops, non avevo visto che mancava il main.

Ma dal cappello posso tirar fuori un bel coniglio per dire che in realtà il main non serve!


package com.ilmionome.simple;
public class Vector {
static Vector v = new Vector();

public Vector() {
System.out.println("com.ilmionome.Vector");
System.exit(0);
}
}

utrecht
18-02-2004, 08:17
Spero esista il main in quella classe perche' io non l'ho visto. Senza il main non ti partira' mai il programma.

:( in effetti non c'è....

Il problema però credo sia ancora più a monte.... in fase di compilazione non mi copia niente all'interno della directory com\ilmionome\simple Non dovrebbero finire qui dentro i files del package? :muro:

fgmac
18-02-2004, 08:34
come compili?
da riga di comando (javac tuaclasse.java ...) o usi un compilatore tipo jbuilder(tanto per citarne uno).
Da riga di comando e' facile incasinarsi con i pakage... :cry:

utrecht
18-02-2004, 11:06
La prima che hai detto: apro una finestra di dos =>C: \java\bin => da qui compilo con 'javac'

Il compilatore che hai citato mi faciliterebbe il compito?
grazie

cn73
18-02-2004, 11:23
Per carità!!!! Non bestemmiare! Lascia perdere JBuilder e continua da riga di comando che se no non impari un fico! :D

PGI
18-02-2004, 12:53
La compilazione con javac genera i file class nella stessa directory in cui si trovano i sorgenti (a meno di reindirizzare l'output).

usa l'opzione "-d [basedir]" per generare l'albero di cartelle

ad esempio:

javac -d z:\java\ Vector.java

genera nella cartella "z:\java" l'albero di cartelle

z:\java\com\
z:\java\com\ilmionome\
z:\java\com\ilmionome\simple\

e il file class

z:\java\com\ilmionome\simple\Vector.class