Newsgroup: it.comp.java
Titolo: comportamento strano del compilatore (con Netbeans 6.1)

Sperando di non innescare altri flame (chiudo scusa in anticipo nel 
caso!!), ho un comportamento stranissimo che non riesco proprio a 
giustificarmi.
Sto usando il porting per JavaME della libreria JSON.org
Il fatto è questo:
public void metodo(){
   JSONObject j = new JSONObject();
   j.put(mykey, myvalue);
}
Il javadoc (ma anche il source code) del metodo put dice "throws 
JSONException", tant'è vero che se non aggiungo try-catch, netbeans me 
lo segnala dandomi le 2 possibilità, o aggiungere il try-catch oppure 
aggiungere la "throws" al metodo.
Io ho aggiunto try-catch, Netbeans smette di segnalarmi l'errore, ma 
quando faccio build, mi dice:
exception org.json.me.JSONException is never thrown in body of 
corresponding try statement
         } catch (JSONException ex) {
Ma come è possibile?? Prima mi dice che "throws exception" e poi mi dice 
di no?
grazie mille
Matteo

 Matteo
-- 
Andrea Francia
http://andreafrancia.blogspot.com/2008/06/macross-frontier.html

 da' l'errore.
public String toString() {
try{
   JSONObject cmd = new JSONObject();
   JSONObject action = new JSONObject();
   action.put(ProtocolConstants.ACTION, action);
   action.put(ProtocolConstants.PARAMETERS, parameters);
   cmd.put(ProtocolConstants.CMD, action_obj);
   return cmd.toString();
   }
   catch (JSONException e){
    return null;
   }
}
Il metodo put genera JSONException.
Compilando, dà errore.
Sostituendo una generica "Exception" a JSONException, funziona senza errori.
grazie,ciao
Matteo

 errori.
la butto li cosi, JSONException si riferisce al package corretto ?
-- 
Davide Consonni

Davide Consonni ha scritto:

Si, anche perchè non ci puo' essere ambiguità con altri package, è 
l'unico che ho importato e che c'è in tutto il codice (e comunque me lo 
conferma anche sotto nella finestra di output quando  mi segnala l'errore)
exception org.json.me.JSONException is never thrown in body of 
corresponding try statement
         catch (org.json.me.JSONException e){
vedi? corrispondono.
bah!!
non capisco proprio.

 
Bisognerebbe andare a vedere la signature del metodo con javap.
javap -cp classpath-to-json.jar JSONObject
-- 
Andrea Francia
http://www.andreafrancia.it/

 javap -cp classpath-to-json.jar JSONObject
ma come si usa javap ??
ho provato in tutti i modi ma mi dà sempre qualche errore.
ho provato a copiare la jar in c:\ per avere il path il più corto 
possibile, ma non trova le classi?
javap -classpath c:\json.jar JSONObject
javap -classpath c:\ JSONObject
niente.
ERROR:Could not find JSONObject
Cmq ho il sourcecode:
public JSONObject put(String key, Object value) throws JSONException {
         if (key == null) {
             throw new JSONException("Null key.");
         }
         if (value != null) {
             testValidity(value);
             this.myHashMap.put(key, value);
         } else {
             remove(key);
         }
         return this;
     }
static void testValidity(Object o) throws JSONException {
         if (o != null) {
             if (o instanceof Double) {
                 if (((Double)o).isInfinite() || ((Double)o).isNaN()) {
                     throw new JSONException(
                         "JSON does not allow non-finite numbers");
                 }
             } else if (o instanceof Float) {
                 if (((Float)o).isInfinite() || ((Float)o).isNaN()) {
                     throw new JSONException(
                         "JSON does not allow non-finite numbers.");
                 }
             }
         }
     }

 Cmq ho il sourcecode:
Mancano gli import.



Lo dico perché ho visto che esistono due eccezioni con nome simile:
org.json.JSONException
org.json.me.JSONException
Magari tu o chi ha scritto la libreria ha fatto casino con gli import e 
ha mischiato le classi microedition con quelle standard.


 javap -classpath c:\json.jar package.dove.sta.JSONObject
allego l'output.
grazie mille
matteo


Mi viene in mente solo questo.
Prova a modificare usando il fully qualified name per le classi
Ad esempio org.json.me.JSONObject al posto di JSONObject.
Oppure riposta il tuo codice, pero' completo degli import e della 
definizione del package.


 definizione del package.
Questa poi! incredibile.
ho fatto come mi hai detto, usando il fully q.n., ho fatto build ed è 
andato tutto ok. poi ho tolto il fqn, fatto il rebuild, e magicamente è 
"guarito". mah!!! mi sa tanto di bug di netbeans che si tiene dei 
riferimenti ai classpath quando lavori con più progetti aperti forse.
comunque grazie per l'aiuto, era davvero fastidioso!
matteo


Bene!


 riferimenti ai classpath quando lavori con più progetti aperti forse.
Mi viene in mente una cosa, ma non so se il problema fosse questo. Non 
so con le IDE, ma con il comando javac i files che dipendono da quello 
principale vengono compilati se non esiste già il file class, altrimenti 
viene usato il file class, anche se il sorgente è stato modificato. 
Tanto che, ormai, io ho preso l'abitudine di eseguire un file batch che 
cancella tutti i files class prima di compilare...

 cancella tutti i files class prima di compilare...
infatti nb ha la voce "clean and build" nel menu.
-- 
Davide Consonni


lol lol lol

Consulente EDP ha scritto:

come norma, faccio sempre "clean and build" , eppure in questo caso non 
ha aiutato a risolvere il problema.
il problema è scomparso solo dopo aver usato il full qualified name.

 il problema č scomparso solo dopo aver usato il full qualified name.
magari qualche cache, mah ..
-- 
Davide Consonni