Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: callo on 01-02-2011, 12:27:07



Title: Eccezioni Mancanti!!
Post by: callo on 01-02-2011, 12:27:07
Ragazzi qualcuno di voi a provato a lanciare nei propri codici(specialmente quelli inerenti gli stack,le code e le code doppie!) eccezioni come:
1)FullStackException  (http://net3.datastructures.net/doc4/net/datastructures/FullStackException.html)
2)EmptyQueueException  (http://net3.datastructures.net/doc4/net/datastructures/EmptyQueueException.html)
3)EmptyDequeException  (http://net0.datastructures.net/doc3/net/datastructures/EmptyDequeException.html)

Pure a voi succede che,nonostante la java.lang.* e java.util.* , siano importate vi segnala un errore ???Come avete risolto? .ciaociao]


Title: Re:Eccezioni Mancanti!!
Post by: Crazy Diamond on 01-02-2011, 12:57:08
Scusa, ma questa libreria net.datastructures l'hai importata?

Quelle eccezioni non sono eccezioni presenti in Java, ma create da terzi ed inserite in una libreria che, appunto, si chiama net.datastructures

Importa quella libreria e ti funziona tutto  .wink

ps: importare tutta la libreria lang e tutta la libreria util è da pazzi! Importa sempre e solo quello che ti serve!


Title: Re:Eccezioni Mancanti!!
Post by: callo on 01-02-2011, 13:12:07
Grazie per il consiglio.....ma ascolta importando la java.lang.RuntimeException non dovrebbe importarmele direttamente???Se è così perchè ciò non succede???


Title: Re:Eccezioni Mancanti!!
Post by: Crazy Diamond on 01-02-2011, 13:25:42
Ripeto:

le eccezioni che hai riportato tu non ci sono nelle librerie java! Sono state create da qualcuno, che ha creato poi la libreria net.datastructures

Se vedi nella documentazione java noti che le eccezioni da te elencate non ci sono:

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/RuntimeException.html

Quindi, se proprio vuoi usare quelle eccezioni, ti scarichi la libreria net.datastructures e la importi!

Sono stato chiaro?  .smile


Title: Re:Eccezioni Mancanti!!
Post by: callo on 01-02-2011, 15:53:04
Chiarissimo!!Grazie mille! .wink Già che ci siamo potresti spiegarmi una cosa gentilmente?ho scaricato il file net.datastructures.jar ma come lo importo??Cioè il comando da inserire per importare un intero package oppure per importare un file jar che si trova in una qualsiasi directory  qual è??Grazie ancora!


Title: Re:Eccezioni Mancanti!!
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 01-02-2011, 16:11:28
Chiarissimo!!Grazie mille! .wink Già che ci siamo potresti spiegarmi una cosa gentilmente?ho scaricato il file net.datastructures.jar ma come lo importo??Cioè il comando da inserire per importare un intero package oppure per importare un file jar che si trova in una qualsiasi directory  qual è??Grazie ancora!
Qua devi fare un po' di allenamento su come gestire i package all'interno del classpath.

Il classpath è l'unione delle cartelle e dei file .JAR elencati in:
-variabile d'ambiente CLASSPATH dell'utente che avvia java <nomeclasseprincipale>/javac <file java>
-(eventuale) parametro -classpath (o -cp) passato a java/javac

Ogni classe non faccia parte del runtime standard della particolare implementazione della JVM che tu usi (Sun/Oracle JDK od OpenJDK per es.) deve stare in una (sotto)cartella di una delle cartelle o dei file .jar (vengono visti come cartelle a questo livello anch'essi) presenti nel classpath.

Il parametro classpath da fornire a java/javac va specificato dopo -cp o -classpath
Esempio:
Code:
java -cp . nomeclasse
Indica che il classpath conterrà ., ovvero la cartella corrente da cui viene invocato il comando java (la cartella corrente è quella che viene mantenuta dal prompt dei comandi/terminale quando invochi java o, per i Collegamenti di windows, quella che viene specificata nella sezione "Da:" della scheda "Collegamento" della finestra delle Proprietà del collegamento).


Title: Re:Eccezioni Mancanti!!
Post by: Daréios89 on 01-02-2011, 16:28:32
Io gestivo l' eccezione creando una classe con il nome della mia eccezione, che estendeva la classe RunTimeException, eredidando il costruttore e potevo lanciare l' eccezione con un messaggio:

Code:
class EmptyStackException extends RuntimeException
{
public EmptyStackException(String err)
{
super(err);
}
}

Ovviamente una classe da inserire all' interno del codice che contiene la classe pubblica stack per esempio.


Title: Re:Eccezioni Mancanti!!
Post by: callo on 01-02-2011, 22:03:39
Chiarissimo!!Grazie mille! .wink Già che ci siamo potresti spiegarmi una cosa gentilmente?ho scaricato il file net.datastructures.jar ma come lo importo??Cioè il comando da inserire per importare un intero package oppure per importare un file jar che si trova in una qualsiasi directory  qual è??Grazie ancora!
Qua devi fare un po' di allenamento su come gestire i package all'interno del classpath.

Il classpath è l'unione delle cartelle e dei file .JAR elencati in:
-variabile d'ambiente CLASSPATH dell'utente che avvia java <nomeclasseprincipale>/javac <file java>
-(eventuale) parametro -classpath (o -cp) passato a java/javac

Ogni classe non faccia parte del runtime standard della particolare implementazione della JVM che tu usi (Sun/Oracle JDK od OpenJDK per es.) deve stare in una (sotto)cartella di una delle cartelle o dei file .jar (vengono visti come cartelle a questo livello anch'essi) presenti nel classpath.

Il parametro classpath da fornire a java/javac va specificato dopo -cp o -classpath
Esempio:
Code:
java -cp . nomeclasse
Indica che il classpath conterrà ., ovvero la cartella corrente da cui viene invocato il comando java (la cartella corrente è quella che viene mantenuta dal prompt dei comandi/terminale quando invochi java o, per i Collegamenti di windows, quella che viene specificata nella sezione "Da:" della scheda "Collegamento" della finestra delle Proprietà del collegamento).

Ti ringrazio tantissimo per l'aiuto però potresti gentilmente farmi il "fatidico esempio chiarificatore" ??Supponendo che il file jar io l'abbia in questa directory "/home/carlo"  come potrei importarla direttamente nel programma e non in fase di compilazione??Grazie ancora!


Title: Re:Eccezioni Mancanti!!
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 01-02-2011, 22:46:53
Ti ringrazio tantissimo per l'aiuto però potresti gentilmente farmi il "fatidico esempio chiarificatore" ??Supponendo che il file jar io l'abbia in questa directory "/home/carlo"  come potrei importarla direttamente nel programma e non in fase di compilazione??Grazie ancora!
Prego.

Comunque stai confondendo le cose: non esiste l'importazione "diretta" o di altro tipo, esiste solo l'importazione e basta.

Il classpath va comunque specificato sia quando compili sia quando esegui, sempre .sisi.
Supponendo che dentro al file
/home/carlo/mioBellArchivio.jar
ci siano il file
package1/miaClasse.class (cioè il file miaClasse.class sia dentro a una cartella chiamata package1 dentro al file .jar)
e tu voglia importarlo nel tuo codice, puoi usare questo per farlo funzionare:
fai in modo che classpath contenga /home/carlo/mioBellArchivio.jar
(ad esempio eseguendo java -cp /home/carlo/mioBellArchivio.jar miofile.java) e dentro al file miofile.java tu scrivi
import package1.miaClasse;
e poi usi il nome "miaClasse" come vuoi

oppure non scrivi la import e direttamente usi nel codice
package1.miaClasse
quando vuoi usare la classe miaClasse riferendoti a quel nome.


Title: Re:Eccezioni Mancanti!!
Post by: callo on 02-02-2011, 00:59:52
Code:
[carlo@soeca ~]$ java -cp /home/carlo/net-datastructures-5-0.jar  /media/9d893d0a-fa19-414d-9467-39bebc3e9454/Progetti\ Java/Deque/src/Deque.java
Exception in thread "main" java.lang.NoClassDefFoundError: /media/9d893d0a-fa19-414d-9467-39bebc3e9454/Progetti Java/Deque/src/Deque/java
Caused by: java.lang.ClassNotFoundException: .media.9d893d0a-fa19-414d-9467-39bebc3e9454.Progetti Java.Deque.src.Deque.java
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: /media/9d893d0a-fa19-414d-9467-39bebc3e9454/Progetti Java/Deque/src/Deque.java.  Program will exit.
cosa posso capire da ciò(oltre al fatto che non trova il main....ma mi sembra normale visto che sto implementando una classe senza main!)??


Title: Re:Eccezioni Mancanti!!
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 02-02-2011, 01:20:46
Code:
[carlo@soeca ~]$ java -cp /home/carlo/net-datastructures-5-0.jar  /media/9d893d0a-fa19-414d-9467-39bebc3e9454/Progetti\ Java/Deque/src/Deque.java
Exception in thread "main" java.lang.NoClassDefFoundError: /media/9d893d0a-fa19-414d-9467-39bebc3e9454/Progetti Java/Deque/src/Deque/java
[...]
cosa posso capire da ciò(oltre al fatto che non trova il main....ma mi sembra normale visto che sto implementando una classe senza main!)??
Puoi capire che invece di compilare stai tentando di passare alla JVM un sorgente testuale Java :boh


Quote
[carlo@soeca ~]$ java -cp /home/carlo/net-datastructures-5-0.jar  /media/9d893d0a-fa19-414d-9467-39bebc3e9454/Progetti\ Java/Deque/src/Deque.java
Exception in thread "main" java.lang.NoClassDefFoundError: /media/9d893d0a-fa19-414d-9467-39bebc3e9454/Progetti Java/Deque/src/Deque/java
[...]
Su, su, non sono questi gli errori di programmazione: prova ancora  .wink


Title: Re:Eccezioni Mancanti!!
Post by: callo on 02-02-2011, 01:38:33
hai ragione non JAVA ma JAVAC!!Direi che così funziona.....in parte!!!perché è verissimo che poi nella mia classe riesco a importare il file.jar però appena provo a lanciare l'eccezione.class mi da il seguente errore:
Code:
EmptyDequeException cannot be resolved to a type
.....che noia....mo perché non gli piace??? .arrossisco


Title: Re:Eccezioni Mancanti!!
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 02-02-2011, 02:21:33
Cosa sarebbe "l'eccezione.class" ? .penso In che senso lanciarla .penso?

Forse conviene che posti il codice per intero .sisi...
Anche se quasi certamente lo vedrò domattina :boh!


Buona notteeeeeeeeeeeeeeeeeeeee .coolio!


Title: Re:Eccezioni Mancanti!!
Post by: callo on 02-02-2011, 03:10:41
Cosa sarebbe "l'eccezione.class" ? .penso In che senso lanciarla .penso?

Forse conviene che posti il codice per intero .sisi...
Anche se quasi certamente lo vedrò domattina :boh!


Buona notteeeeeeeeeeeeeeeeeeeee .coolio!
Intendo che all'interno del file.jar ci sono moltissimi file.class che non sono altro che classi per la gestione delle eccezioni!!!esempio(così mi spiego meglio!)il metodo:
Code:
public E removeFirst() throws EmptyDequeException;
se la coda doppia è vuota lancia l'eccezione EmptyDequeException che è contenuta dentro il file.jar!!Soltanto che nonostante riesca ad importare tutto il package(o meglio tutto ciò che è contenuto dentro quel jar!) quel metodo mi da il seguente errore in compilazione:
Code:
EmptyDequeException cannot be resolved to a type
Ho cercato in internet cosa vuol dire questo tipo di errore e questo è quanto ho trovato:
Code:
there is a missing library!
........ .penso ma come!Sembrava aver importato tutto!! :boh


Title: Re:Eccezioni Mancanti!!
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 03-02-2011, 01:34:18
Io ho scaricato lo stesso file tuo net-datastructures-5-0.jar, l'ho elencato fra i CLASSPATH, ho importato correttamente e sono riuscito senza problemi a istanziare un oggetto di classe EmptyDequeueException, in un mio codice banale che fa solo quello.

Forse il codice (non il .jar, proprio il codice .java) con cui stai avendo a che fare tu è stato scritto da te? In tal caso, l'importazione potrebbe essere stata fatta in modo diverso, per cui la cosa migliore prima di continuare questa discussione, che su questo punto non può fare altro che fermarsi, è postare l'intero codice (o almeno scrivi la riga che inizia con import dal/dai file che usano le classi del package esterno).

Buona notte  .ciaociao.


Title: Re:Eccezioni Mancanti!!
Post by: callo on 03-02-2011, 09:31:20
Code:
import net.datastructures.*;

public interface Deque <E>
{
public int size();
public boolean isEmpty();
public E getFirst() throws EmptyDequeException;  //EmptyDequeException cannot be resolved to a type
public E getLast() throws EmptyDequeException; //EmptyDequeException cannot be resolved to a type
public void addFirst(E element);
public void addLast(E element);
public E removeFirst()throws EmptyDequeException;  //EmptyDequeException cannot be resolved to a type
public E removeLast()throws EmptyDequeException; //EmptyDequeException cannot be resolved to a type
}
Questo è il codice dell'interfaccia scritta da me!!Comunque ora riprovo a scaricare il file jar e importarlo nuovamente!!vediamo che succede!!


Title: Re:Eccezioni Mancanti!!
Post by: callo on 03-02-2011, 10:09:18
Problema risolto  :yoh......a quanto ho capito il file jar che avevo scaricato era corrotto quindi avevo voglia di tentare e ritentare!!L'ho scaricato nuovamente ho cancellato tutto (compresa l'interfaccia creata!) e ho ricominciato dall'inizio!Grazie mille comunque per l'aiuto!Anche perchè  mi ha permesso di capire come importare file jar in un progetto!!Ultima domandina e poi non rompo +!  :[Emoticon] Asd: Se in futuro volessi importare nel mio progetto una singola classe di un altro package dovrò utilizzare lo stesso metodo applicato ora per il file.jar no??Esempio se volessi utilizzare i metodi di una classe chiamata Nodo(inserita per esempio nel package Lista_Linkata) in un altro progetto(inserito per esempio nel package Albero) allora potrò scrivere, sempre da terminale:
Code:
javac -cp /directory/della/classe/Nodo /directory/della/classe/Albero/Albero.java
????


Title: Re:Eccezioni Mancanti!!
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 03-02-2011, 12:55:57
No.

Fra i classpath (sia in variabile d'ambiente sia in parametro -cp) ci stanno solo ed esclusivamente percorsi di cartelle o di file JAR.

Se vuoi importare una singola classe, dopo aver specificato correttamente il classpath (correttamente intendo rispetto al package, che è una cosa più interna rispetto al classpath, diciamo), ti è sufficiente fare "import miopackage.singolaclasse;" per poter usare il nome "singolaclasse"  :pray.

Prego, di nulla.
Ciao ciao .ciaociao.