Newsgroup: it.comp.java
Titolo: Versioni incompatibili di Java?

Buongiorno a tutti!
Ho un progetto Java sviluppato principalmente su un Macbook, che monta 
java 1.5.0, usando eclipse 3.3.2 come IDE.
Lo stesso identico progetto, zippato e importato nel workspace di una 
macchina con winxp (sempre eclipse 3.3.2, ma java 1.6.0_06) da parecchi 
errori e in sostanza parte ma arrivato a un certo punto alcune 
funzionalità non vanno.
Ho anche provato a usare come libreria di default una 1.5.0_14 e mi da 
un popup che dice "main class not found" e errori del tipo 
"java.lang.UnsupportedClassVersionError: Bad version number in .class 
file" .
Come posso risolvere, a parte continuando a lavorare sul Macbook? Grazie

 file" .
se posti gli errori magari ti possiamo aiutare.
Ciao Jack

 Ciao Jack
Con la 1.5.0 l'errore è quel che ho scritto: main class not found e 
java.lang.UnsupportedClassVersionError: Bad version number in .class file.
Con la 1.6.0 riesco almeno ad avviare l'applicazione (è un gioco), 
scelgo i personaggi e quando arrivo al tabellone da errori di questo 
tipo quando sposto il cursore sulle caselle del tabellone:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
[segue una valanga di errori simili]

koichirose ha scritto:

facendo un clean del progetto.
in pratica con il progetto ti stai portando dietro anche i compilati 
.class da una versione all'altra della jvm e questo è il tuo problema.
poi quando hai tempo studiati:
- le opzioni "source" e "target" del compilatore
- un gestore di sorgenti per condividere gli stessi fra più computer
-- 
? Fino all'anno scorso avevo un solo difetto. Ero presuntuoso.
http://softvalley.blogspot.com
http://www.flickr.com/photos/marko_po/

 .class da una versione all'altra della jvm e questo č il tuo problema.
spiegami dove dovrebbe essere il problema? visto che tra l'altro e'
salito di versione (dalla .5 alla .6)?
Ciao Jack
-- 
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?

 salito di versione (dalla .5 alla .6)?
Esattamente, sul macbook funziona e c'è la 1.5.0, sul mio sono salito 
alla 1.6.0 e non va

 salito di versione (dalla .5 alla .6)?
tu hai un'altra spiegazione per una UnsupportedClassVersionError, a 
parte quella di incompatibilitą di bytecode?
se poi crede di eseguire con una vm e invece esegue con un'altra la cosa 
non mi č data a sapere.


 Niente da fare, ho fatto project -> clean, dà gli stessi errori.
e gli "stessi errori" sarebbero di UnsupportedClassVersionError?


 
Esattamente.
Per quanto riguarda l'altro tuo post, ti spiego come cambio vm, magari 
sbaglio proprio li:
project -> properties - java build path, add library, scelgo quella che 
voglio (1.5 o 1.6) e rimuovo l'altra, in questo modo nel package 
explorer (a sx) ho 'JRE System Library [jdk1.6.0_06]' oppure 1.5.0_14 se 
scelgo l'altra. Poi avvio il progetto esattamente come faccio sul macbook.
In alto nella console (dove sta anche il log degli errori) mi dice 
infatti cosa sto usando, ad esempio C:\Program 
files\Java\jdk1.6.0_06\bin\javaw.exe  (oppure il path della 1.5 se 
scelgo l'altra). Perciò suppongo di non sbagliare questo 
passaggio...giusto? Non so più che fare

 Esattamente.
Nessuno mi sa aiutare un po'?

 Nessuno mi sa aiutare un po'?
non puoi stare dei giorni su di un problema di incompatibilità di 
versioni...


 versioni...
Già, il problema è che non so dove sbattere la testa.
Viva il codice portabile di Java

koichirose ha scritto:

ti ho spiegato che del progetto di devi portare dietro i sorgenti, non 
il compilato.
che il bytecode sia portabile è assodato, fidati, è una cosa che si fa 
giornalmente.


 il compilato.
eh ho capito, ma io ho fatto project -> clean e poco cambia...

 eh ho capito, ma io ho fatto project -> clean e poco cambia...
non so che dirti. purtroppo costì a sistemarti il progetto di persona 
non posso venire.


[segue una valanga di errori simili]
in genrere le linee che seguono non dovrebbero essere simili,
dovrebbero darti lo tack trace, utilissimo per capire perché non va su
Windows. In generale è meglio non usare AWT se vuoi avere qualcosa di
portabile, SWING e SWT sono nti apposta...
Altra cosa: la vista Problems ti da errori? Se c'è qualcosa di
sbagliato nel classpath, ad esempio, Eclipse si rifiuta di fare il
clean, e l'operazione è inutile...

 clean, e l'operazione è inutile...
Da solo un po' di warning, tipo "la variabile xxx non è mai letta", 
nient'altro di relativo al clean :/


Ma ti da ancora UnsupportedClassVersionError?
Perché altrimenti, vuol dire che hai risolto i problemi di
compatibilità, ti rimane il nullpointer che puoi risolbere con il
debug....

 debug....
Mica tanto...cioè, non vedo perchè su un mac con 1.5 funziona e su win 
con 1.6 dà errori a valanga.
Il debug dice: "EventDispatchThread.run() line: not available [local 
variables unavailable]	"
Source not found
e mi da la possibilità di "Edit source lookup path" :/


scusa, ma
1)non avevi detto che avevi i sorgenti?
2)se hai i sorgenti, non puoi mettere un breakpoint sull'eccezione?
3)che gioco è?

 e mi da la possibilità di "Edit source lookup path" :/
e dov'è il problema? vuole sapere dove sono i sorgenti, che hai...
scusami ma penso che non possa andare molto avanti a forza di chiedere 
consigli. ti fermi su questioni che, per avere consiglio, bisogna dare 
per assodate. altrimenti bisogna che qualcuno venga di persona a 
sistemarti il progetto.


 sistemarti il progetto.
Hai perfettamente ragione, non sono così esperto, mi hanno dato da fare 
questo progetto a maggio, partendo da conoscenze nulle di java, e se non 
lo si consegna entro settimana prossima non si può nemmeno dare l'esame.
Il problema è che lavorando su un computer solo con un mio collega non 
ci si muove più, per questo devo assolutamente lavorarci anche da casa...

 e mi da la possibilità di "Edit source lookup path" :/
vuol dire che non ha capito dove stanno i sorgenti. puoi certamente
dirgli dove stanno premendo sul link, e navigando sulla cartella dei
sorgenti. Ma c'è il rischio che usi l'informazione solo per il debug,
e non nella compilazione (essenziale se devi procedere con lo
sviluppo). pertanto ti consigli di andare a specificare la posizione
dei sorgenti nella pag delle proprietà del progetto (java build
path>sources).
Un modo SICURO per sapere se fa il build, è quello di cancellare
i .class.... se non li rigenera in automatico, vuol dire che qualcosa
gli impedisce di compilare... è una prova che ti conviene fare,
altrimenti non capirai mai se le modifiche che fai sono state prese

 altrimenti non capirai mai se le modifiche che fai sono state prese
Ho diversi package nel progetto, ho preso la cartella dove sta il java 
che faccio partire ed ho eliminato tutti i class. A questo punto se 
faccio run dice "main class not found", anche se "build automatically" è 
flaggato. Allora deflaggo "build automatically" e buildo manualmente: 
genera i class. Faccio partire e gli errori sono gli stessi, parte tutto 
ma arrivati alla schermata principale, dopo aver scelto i giocatori, 
delle funzionalità non vanno.
Ho provato a cambiare totalmente workspace ed eliminare TOTALMENTE i 
.class presenti. Ora "build automatically" effettivamente builda i 
.class, ma i problemi sono ancora gli stessi.
Nota: sto ormai usando la 1.6 per tutte queste prove, dato che la 
retrocompatibilità dovrebbe essere assodata, giusto?
Sono disposto a mettere a disposizione la postazione con qualche 
controllo remoto...
Grazie ancora

 Grazie ancora