Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Versioni di JVM

0 views
Skip to first unread message

marco74

unread,
Nov 13, 2007, 8:57:02 AM11/13/07
to
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

Pablo Xon

unread,
Nov 13, 2007, 9:56:31 AM11/13/07
to
marco74 ha scritto:

> 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 !!!) ?

Ovviamente sì, in caso contrario per quale motivo rilascerebbero diverse
versioni successivi, solo per fare piccoli cambiamenti alla sintassi del
linguaggio?
Se controlli sul sito della sun troverai elencate tutte le modifiche,
versione per versione.

> Se sì: potrei installare sul pc entrambe le JVM e forzare l'utilizzo
> 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

Hybris

unread,
Nov 13, 2007, 11:33:21 AM11/13/07
to
Il Tue, 13 Nov 2007 05:57:02 -0800, marco74 ha scritto:

> 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 !!!) ?

parametri -source e - target di javac

Pablo Xon

unread,
Nov 13, 2007, 12:30:37 PM11/13/07
to
Hybris ha scritto:

Il suo problema non è la compilazione, è il far girare il compilato con
una versione precedente.

Ciao,
Paolo

marco74

unread,
Nov 13, 2007, 12:36:24 PM11/13/07
to

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

Hybris

unread,
Nov 13, 2007, 12:41:39 PM11/13/07
to
Il Tue, 13 Nov 2007 18:30:37 +0100, Pablo Xon ha scritto:

> Il suo problema non è la compilazione, è il far girare il compilato con
> una versione precedente.

esattamente. basta che compili nel modo giusto.

Hybris

unread,
Nov 13, 2007, 12:44:46 PM11/13/07
to
Il Tue, 13 Nov 2007 09:36:24 -0800, marco74 ha scritto:

> Lancio javac senza parametri aggiuntivi

javac -source 1.4 .....

Marco

unread,
Nov 13, 2007, 12:47:37 PM11/13/07
to

> 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ì...

Pablo Xon

unread,
Nov 13, 2007, 1:37:09 PM11/13/07
to
Hybris ha scritto:

> 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

marco74

unread,
Nov 14, 2007, 2:35:24 AM11/14/07
to

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ò.

marco74

unread,
Nov 14, 2007, 4:07:08 AM11/14/07
to

Funziona!

Marco Trevisan

unread,
Nov 15, 2007, 8:21:39 AM11/15/07
to
Marco <nos...@excite.it> ha scritto:


Occhio,Rischi in esecuzione comunque delle incompatibilita',es:
<java>
public class TestCC {
public static void main(String[] args) {
System.out.println(System.nanoTime());
}
}
</java>
> java -version
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode)
> javac.exe -source 1.4 -target 1.4 TestCC.java
> java -version
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
> java TestCC
> 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

0 new messages