Newsgroup: it.comp.java
Titolo: Versioni di JVM

Ciao a tutti,
è una domanda da vero beginner ... In azienda abbiamo un programma che
funziona con la la JVM 1.4.2_07-b05, però siccome mi sto avvicinando
alla programmazione ho installato la JDK 1.6.
Come dicevo ... se uso il JRE 1.6 il programma aziendale non funziona,
quindi ora sono con il compilatore della 1.6 e la JVM della 1.4. I
miei programmi di test vengono compilati correttamente, ma al momento
di lanciarli ottengo il seguente messaggio di errore relativo ad un
mismatch di versione
D:\marco\Lavoro\Java\esercizi\Capitolo 05>java TestGara
Exception in thread "main" java.lang.UnsupportedClassVersionError:
TestGara (Unsupported major.minor version 50.0)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
I miei programmi non hanno caratteristiche specifiche della versione
1.6, significa che un programma compilato con versioni superiori non
può girare su JVM inferiori (spero di no !!!) ?
Se sì: potrei installare sul pc entrambe le JVM e forzare l'utilizzo
alternativamente di una o dell'altra a seconda della necessità ?
Se no: cosa devo modificare ?
Grazie 1000
mc

 alternativamente di una o dell'altra a seconda della necessità ?
Sotto windows puoi installare versioni diverse di Java, e utilizzare 
quella che ti serve specificando sempre il path della versione prima del 
comando.
es.
c:\jdk\jdk1.4\javac
c:\jdk\jdk1.6\java
Ovviamente devi usare la stessa versione per compilare ED eseguire una 
classe.
Ciao,
Paolo

 può girare su JVM inferiori (spero di no !!!) ?
parametri -source e - target di javac

Hybris ha scritto:

Il suo problema non è la compilazione, è il far girare il compilato con 
una versione precedente.
Ciao,
Paolo


Essendo un po' nuovo, non ho capito al 100%, provo a mettere un po' di
cose ...
Variabili d'ambiente
Path
C:\Programmi\Nmap;C:\Programmi\Java\j2re1.4.2_07\bin;C:\Programmi
\GnuWin32\bin;C:\Programmi\Java\jdk1.6.0_03\bin
CLASSPATH
.;C:\Programmi\Java\j2re1.4.2_07\lib\ext\QTJava.zip
Source
public class TestGara {
	public static void main (String args[]) {
	Gara imola = new Gara("GP di Imola");
	imola.corriGara();
	String risultato = imola.getRisultato();
	System.out.println(risultato);
}
}
Però ovviamente mancano le altre classi a cui si fa riferimento (per
brevità!).
Lancio javac senza parametri aggiuntivi

 una versione precedente.
esattamente. basta che compili nel modo giusto.

 Lancio javac senza parametri aggiuntivi
javac -source 1.4 .....

> parametri -source e - target di javac
Esattamente. Più precisamente,
javac -source 1.4 -target 1.4 mioSorgente.java
Dopo aver installato per anni 4-5 versioni diverse di java, ho scoperto 
che si poteva fare così...

 esattamente. basta che compili nel modo giusto.
Scusa (anche a Marco) hai perfettamente ragione.
Leggendo il post originario per qualche bizzarro motivo avevo pensato al 
caso opposto: compilazione da una versione per una successiva, non 
precedente.
Ciao,
Paolo


Grazie a tutti per le risposte!
Credo di aver equivocato il famoso concetto di compatibilità verso il
basso: NON significa che qualcosa compilato in una ver superiore possa
girare in una inferiore, ma l'esatto contrario!
Ci proverò.


Funziona!

 java TestCC
Exception in thread "main" java.lang.NoSuchMethodError:  
java.lang.System.nanoTim
e()J
         at TestCC.main(TestCC.java:3)
Soluzione
"It is important to use -bootclasspath and -extdirs when cross-compiling
...
javac -target 1.5 -bootclasspath jdk1.5.0\lib\rt.jar \
	    -extdirs "" OldCode.java"
http://java.sun.com/javase/6/docs/technotes/tools/windows/javac.html#crosscomp-example
--
Marco
-- 
Posted via a free Usenet account from 
http://www.teranews.com