Java

Page last edited 680 giorni 4 ore fa
Da wiki.betaingegneria.it.

JAVA[modifica]

Inziamo con il vedere le differenze tra JDK, JRE e JVM.

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

JVM[modifica]

JVM (Java Virtual Machine) è una macchina astratta. È una specificazione che fornisce un ambiente esecutivo (runtime environment) nel quale il bytecode java (lo pseudo codice macchina) può essere eseguito.

Le JVM sono disponibili per una ampia varietà di piattaforme hardware e software. JVM, JRE e JDK sono dipendenti dalla piattaforma perché le configurazioni per ogni sistema operativo sono diverse. Però, Java è indipendente dalla piattaforma. La JVM fa le seguenti cose principali:

  • carica il codice
  • verifica il codice
  • esegue il codice
  • fornisce l'ambiente esecutivo

JRE[modifica]

JRE è l'acronimo di Java Runtime Environment. Serve a fornire un ambiente di esecuzione. È l'implementazione della JVM. Esiste fisicamente. Contiene le librerie + altri files che la VM usa durante l'esecuzione (java, javaw, rt.jar, etc).

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

JDK[modifica]

JDK è l'acronimo di Java Development Kit. Esiste fisicamente. Contiene il JRE + strumenti per lo sviluppo (javac, javas, etc)

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

Howto: come conoscere la versione della JDK installata[modifica]

  • Aprire Gestore Pacchetti
  • Cercare sun-java6-jdk
  • Cliccare sul pacchetto e poi su Proprietà
  • Scegliere la scheda File Installati.

Si dovrebbe leggere qualcosa del tipo: /usr/lib/jvm/java-6-sun-1.6.0.24

Oppure da linea di comando[modifica]
  marcob@jsbach:/opt$ java -version
  java version "1.6.0_26"
  Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
  Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

Mozilla Firefox[modifica]

Per dire a Firefox quale plugin invocare per gestire le applet, aprire

  Strumenti > Componenti Aggiuntivi
Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

La posizione dei file è qui

       root@jsbach:/usr/lib/mozilla/plugins# ll
       totale 856
       drwxr-xr-x 2 root root   4096 2011-06-30 11:12 ./
       drwxr-xr-x 4 root root   4096 2010-10-07 18:10 ../
       lrwxrwxrwx 1 root root     37 2011-06-19 13:01 flashplugin-alternative.so -> /etc/alternatives/mozilla-flashplugin*
       -rw-r--r-- 1 root root  98280 2010-03-10 02:37 gecko-mediaplayer-dvx.so
       -rw-r--r-- 1 root root  98280 2010-03-10 02:37 gecko-mediaplayer-qt.so
       -rw-r--r-- 1 root root  98280 2010-03-10 02:37 gecko-mediaplayer-rm.so
       -rw-r--r-- 1 root root  98280 2010-03-10 02:37 gecko-mediaplayer.so
       -rw-r--r-- 1 root root  98280 2010-03-10 02:37 gecko-mediaplayer-wmp.so
       lrwxrwxrwx 1 root root     39 2011-06-30 11:12 libjavaplugin.so -> /etc/alternatives/mozilla-javaplugin.so
       -rw-r--r-- 1 root root   6048 2011-01-25 10:54 librhythmbox-itms-detection-plugin.so
       -rw-r--r-- 1 root root 101536 2010-09-28 11:30 libtotem-cone-plugin.so
       -rw-r--r-- 1 root root 110304 2010-09-28 11:30 libtotem-gmp-plugin.so
       -rw-r--r-- 1 root root  72816 2010-09-28 11:30 libtotem-mully-plugin.so
       -rw-r--r-- 1 root root  81344 2010-09-28 11:30 libtotem-narrowspace-plugin.so

e seguendo di link in link...

 marcob@jsbach:/etc/alternatives$ ll mo*
 lrwxrwxrwx 1 root root 16 2011-06-20 11:35 moc -> /usr/bin/moc-qt3*
 lrwxrwxrwx 1 root root 32 2011-06-20 11:35 moc.1.gz -> /usr/share/man/man1/moc-qt3.1.gz
 lrwxrwxrwx 1 root root 58 2011-06-19 13:01 mozilla-flashplugin -> /var/lib/flashplugin-installer/npwrapper.libflashplayer.so*
 lrwxrwxrwx 1 root root 49 2011-06-30 11:12 mozilla-javaplugin.so -> /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so

Problema msvcr71.dll[modifica]

Ho trovato questo problema lanciando (in WINDOWS) [../SQLdeveloper SQL Developer]: manca la libreria msvcr71.dll.

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

Soluzione: copiare il file (di solito c'è da qualche altra parte del filesystem, ma scarichiamo la versione adatta alla versione di JDK che vogliamo usare) e incollarlo nella STESSA directory dell'eseguibile che lo richiede.


Nuovo OS[modifica]

Nella nuova partizione ho JRE in

 /usr/local/lib/jre1.7.0_04

Ci sono due link, quello che assomiglia di più a quello che mi chiede Ubuntu è questo:

 http://www.oracle.com/technetwork/java/archive-139210.html

Però questo mi redirige ad una pagina che contiene JDK:

 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html

solo che io sto già scaricando la versione 7u4

Anche il JDK lo metto sotto /usr...

 /usr/local/lib/jdk1.7.0_04

In questo caso sto cercando di eseguire l'Oracle SQL Developer. Non l'ho scaricato: ho spostato in una directory della partizione corrente la directory nella vecchia partizione as is e ho provato ad eseguire lo shell script che avevo creato, con questo risultato:

   marcob@jsbach:~$ ./sqld.sh 
   
   Oracle SQL Developer
    Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. 
   
   Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk
   /usr/local/lib/jdk1.7.0_04/jre/bin
   Error: /usr/local/lib/jdk1.7.0_04/jre/bin/bin/java not found

Qui praticamente ci dice che il programmino aggiungerà da solo il path bin/java in fono al path che inseriamo noi, per cui

   Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk
   /usr/local/lib/jdk1.7.0_04/jre    
   /home/marcob/Documenti/software/database/Oracle/sqldeveloper/sqldeveloper/bin/../../ide/bin/launcher.sh: riga 455: /home/marcob/.sqldeveloper/jdk: File o directory non esistente
   Error: Java home /usr/local/lib/jdk1.7.0_04/jre/bin/java is not a J2SE SDK.
   Running SQL Developer under a JRE is not supported.
   
   If the Java VM specified by the SetJavaHome is actually a full J2SDK installation
   then add 'SetSkipJ2SDKCheck true' to /home/marcob/Documenti/software/database/Oracle/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf

In questo caso Oracle ci avvere che il pacchetto che ci serve non è un semplice JRE, ma proprio tutto il JDK, quindi

   marcob@jsbach:~$ ./sqld.sh 
   
   Oracle SQL Developer
    Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. 
   
   Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk
   /usr/local/lib/jdk1.7.0_04

A questo punto il launcher funziona e parte il SQL Developer

Solo che ho perso tutte le connessioni salvate :(

Importante![modifica]

Per poter accedere ai database occore informare SQLDEveloper dove puoò trovare il file di descrittori delle connessioni a Oracle (tnsnames.ora).

Posto che questo descrittore lo possiamo mettere dove vogliamo, poi sarà nostra cura dirlo a SQL Developer aprendo la pagina delle Preferenze, e selezionando Database > Avanzate come illustrato in figura e inserendo il pat corretto nel controllo Directory tnsnames:

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

Installazione di JRE (Java Runtime Environment)[modifica]

 $ sudo add-apt-repository ppa:webupd8team/java <--- aggiungi ppa
 $ sudo apt-get update
 $ sudo apt-get install oracle-java7-installer <--- installa
 

alla fine

  $ java -version
  java version "1.7.0_21"
  Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
  Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

Fonte

Intallazione di Java 8[modifica]

Ho già una JDK a bordo ma è quella open:

   marcob@jsbach:/usr/local/lib$ sudo update-alternatives --config java
   [sudo] password for marcob: 
   update-alternatives: attenzione: /etc/alternatives/java è stato modificato (manualmente o da uno script). Vengono usati i soli aggiornamenti manuali
   Sono disponibili 2 scelte per l'alternativa java (che fornisce /usr/bin/java).
   
     Selezione    Percorso                                        Priorità  Stato
   ------------------------------------------------------------
     0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      modalità automatica
     1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      modalità manuale
     2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      modalità manuale
   
   Premere Invio per mantenere il valore predefinito[*] o digitare il numero della selezione: 
   marcob@jsbach:/usr/local/lib$

No buono, Mirth vuole la Oracle JDK!

Su Ubuntu 14.04 al primo comando

 $ sudo add-apt-repository ppa:webupd8team/java

mi dice questo:

   marcob@jsbach:/usr/local/lib$ sudo add-apt-repository ppa:webupd8team/java
    Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK6 / JDK7 / JDK8). There are no actual Java files in this PPA. 
   
   More info: 
   - for Oracle Java 7: http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
   - for Oracle Java 8: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html
   
   Debian installation instructions: http://www.webupd8.org/2012/06/how-to-install-oracle-java-7-in-debian.html
    Maggiori informazioni: https://launchpad.net/~webupd8team/+archive/ubuntu/java
   
   gpg: portachiavi "/tmp/tmpfegp0q0r/secring.gpg" creato
   gpg: portachiavi "/tmp/tmpfegp0q0r/pubring.gpg" creato
   gpg: richiesta della chiave EEA14886 dal server hkp keyserver.ubuntu.com
   gpg: /tmp/tmpfegp0q0r/trustdb.gpg: creato il trustdb
   gpg: chiave EEA14886: chiave pubblica "Launchpad VLC" importata
   gpg: Numero totale esaminato: 1
   gpg:               importate: 1  (RSA: 1)
   OK

L'url per Java 8 è esattamente quello che sto seguendo

   $ sudo apt-get update
   $ sudo apt-get install oracle-java8-installer
   ......

Ad un certo punto chiede di accettare le condizioni di licenza per proseguire

File:Java8 2.png

   ....
   Oracle JDK 8 installed
   update-alternatives: viene usato /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libnpjp2.so per fornire 
      /usr/lib/mozilla/plugins/libjavaplugin.so (mozilla-javaplugin.so) in modalità automatica
   Oracle JRE 8 browser plugin installed
   Configurazione di gsfonts-x11 (0.22)...
   $

Verifica:

   marcob@jsbach:/usr/local/lib$ java -version
   java version "1.8.0_25"
   Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
   Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

Ora seleziono la nuova Virtual Machine:

   marcob@jsbach:/usr/local/lib$ sudo update-alternatives --config java
   Sono disponibili 3 scelte per l'alternativa java (che fornisce /usr/bin/java).
   
     Selezione    Percorso                                        Priorità  Stato
   ------------------------------------------------------------
     0            /usr/lib/jvm/java-8-oracle/jre/bin/java          1072      modalità automatica
     1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      modalità manuale
     2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      modalità manuale
     3            /usr/lib/jvm/java-8-oracle/jre/bin/java          1072      modalità manuale <--- nuova opzione
   
   Premere Invio per mantenere il valore predefinito[*] o digitare il numero della selezione: 3
   update-alternatives: viene usato /usr/lib/jvm/java-8-oracle/jre/bin/java per fornire /usr/bin/java (java) in modalità manuale
   marcob@jsbach:/usr/local/lib$

Problema: non parte più Oracle Sqldeveloper[modifica]

Dopo aver installato Oracle Java 8, non mi parte più Sqldeveloper. Ovviamente se lo faccio partire con il doppio click il tutto è inquietantemente silente. Allora lo faccio partire da irga di comando:

   $ /opt/sqldeveloper/sqldeveloper.sh
   
    Oracle SQL Developer
    Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
   
   Type the full pathname of a JDK installation (or Ctrl-C to quit), the path will be stored in /home/marcob/.sqldeveloper/4.0.0/product.conf
   

io scrivo il path che posso recuperare con sudo update-alternatives --config java

   /usr/lib/jvm/java-8-oracle/jre

(non scrivere anche il bin/java alla fine del path!)

Java mi risponde così:

   Error: Java home /usr/lib/jvm/java-8-oracle/jre/bin/java is not a JDK.
   Running SQL Developer under a JRE is not supported.
   
   If this Java VM is actually a full JDK installation, add
   'SetSkipJ2SDKCheck true' to one of the following files.
   Otherwise specify a different Java JDK location with a
   SetJavaHome directive in one of the following files:
     /home/marcob/.sqldeveloper/4.0.0/product.conf
     /opt/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf
   

Faccio come mi dice lui (è in effeti una full JDK quella installata, sulle differenze tra JRE, JDK e JVM vedi Java#JAVA ), aggiungo la riga desiderata alla fine del file /home/marcob/.sqldeveloper/4.0.0/product.conf.

Funziona.

Switch tra le varie versioni installate[modifica]

Possiamo tenere a bordo più versioni di Java e commutare tra di loro con

  $ sudo update-alternatives --config java
  Sono disponibili 4 scelte per l'alternativa java (che fornisce /usr/bin/java).
    Selezione    Percorso                                        Priorità  Stato
  ------------------------------------------------------------
    0            /usr/lib/jvm/java-7-oracle/jre/bin/java          1095      modalità automatica
    1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      modalità manuale
  * 2            /usr/lib/jvm/java-6-oracle/jre/bin/java          1092      modalità manuale
    3            /usr/lib/jvm/java-7-oracle/jre/bin/java          1095      modalità manuale
    4            /usr/lib/jvm/java-8-oracle/jre/bin/java          1094      modalità manuale

Sintassi[modifica]

  Integer integ1= new Integer(iVal);  

Nota Bene:

  NomeClasse variabile = <keyword new> <Costruttore> = <new> NomeClasse(valore);
  • I tipi di dati più comuni li troviamo in -> java.lang
  • Gli oggetti più comuni (liste, date, pile) li troviamo in -> java.util

Interfacce[modifica]

Implementazione di un'interfaccia[modifica]

Per dichiarare una classe che implementa un'interfaccia, si include una clausola implements nella dichiarazione della classe. La classe può implementare più di un'interfaccia, in modo che la parola chiave implements è seguito da un elenco separato da virgole delle interfacce implementate dalla classe. Per convenzione, la clausola implements segue la clausola extends, se ce n'è una.

Una semplice interfaccia: Relatable (Confrontabile)[modifica]

Si consideri un'interfaccia che definisce come confrontare le dimensioni degli oggetti.

 public interface Relatable {
       
   // this (object calling isLargerThan)
   // and other must be instances of 
   // the same class returns 1, 0, -1 
   // if this is greater than, 
   // equal to, or less than other
   
   public int isLargerThan(Relatable other);
 }

Si osservi che questa interfaccia ha un metodo (isLargerThan()) che non è definito, è definita solo l'API. Vedremo tra poco perché.

Se si vuole essere in grado di confrontare le dimensioni di oggetti simili, indipendentemente da che oggetti si tratta, la classe che istanzia tali oggetti dovrebbe implementare Relatable.

Ogni classe può implementare Relatable se c'è qualche modo per confrontare la "dimensione" relativa degli oggetti istanziati dalla classe.

Per le stringhe, potrebbe essere il numero di caratteri; per libri, potrebbe essere il numero di pagine; per gli studenti, potrebbe essere il peso; e così via. Per gli oggetti geometrici piani, l'area potrebbe essere una buona scelta (vedere la classe RectanglePlus che segue), mentre il volume dovrebbe funzionare per oggetti geometrici tridimensionali. Tutte queste classi possono implementare il metodo isLargerThan().

Se si sa che una classe implementa Relatable, poi si sa che è possibile confrontare le dimensioni degli oggetti istanziati da quella classe.

Implementare l'interfaccia Relatable[modifica]

Ecco la classe Rectangle che è stata definita nel capitolo "Creare Oggetti", riscritta al fine di implementare Relatable.

 public class RectanglePlus 
   implements Relatable {
   public int width = 0;
   public int height = 0;
   public Point origin;
   
   // four constructors
   public RectanglePlus() {
       origin = new Point(0, 0);
   }
   public RectanglePlus(Point p) {
       origin = p;
   }
   public RectanglePlus(int w, int h) {
       origin = new Point(0, 0);
       width = w;
       height = h;
   }
   public RectanglePlus(Point p, int w, int h) {
       origin = p;
       width = w;
       height = h;
   }
   
   // a method for moving the rectangle
   public void move(int x, int y) {
       origin.x = x;
       origin.y = y;
   }
   
   // a method for computing
   // the area of the rectangle
   public int getArea() {
       return width * height;
   }
   
   // a method required to implement
   // the Relatable interface
   public int isLargerThan(Relatable other) {
       RectanglePlus otherRect 
           = (RectanglePlus)other;
       if (this.getArea() < otherRect.getArea())
           return -1;
       else if (this.getArea() > otherRect.getArea())
           return 1;
       else
           return 0;               
   }
 }

Poiché RectanglePlus implementa Relatable, le dimensioni di due oggetti RectanglePlus possono essere confrontate.

Attenzione: è obbligatorio (required) quando si implementa un'interfaccia, definire i metodi dell'interfaccia all'interno della classe che la implementa. Per esempio, Relatable ha un solo metodo isLargerThan che a livello di interfaccia è definito in modo generico perché l'implementazione cambia a seconda della natura dell'oggetto, ovvero a seconda della della classe (per confrontare due figure piane occorrerà un metodo, per confrontare due figure tridimensionali occorrerà un metodo diverso -- il quale, però, deve ritornare la stessa risposta in generale, se un oggetto è o no più grande di un altro (boolean).

Classi generiche[modifica]

Appunti da Oracle

Un tipo generico è una classe o un'interfaccia generica che è parametrizzata sui tipi. La seguente classe Box verrà modificata per illustrare il concetto.


Una semplice classe Box[modifica]

Cominciamo con l'esaminare una Box non generica che opera su oggetti di qualsiasi tipo. ha bisongo di soli due metodi: set che aggiunge un oggetto alla scatola e get che la tira fuori:

  public class Box {
     private Object object;
     
     public void set(Object object) { this.object = object; }
     public Object get() { return object; }
  }

Poiché i suoi metodi accettano o ritornano un Object, siete liberi di passargli qualsiasi cosa vogliate, eccetto uno dei tipi primitivi. Non c'è modo di verificare al momento della compilazione, quale classe è usata. Una parte del porgramma può mettere un Integer nella scatole e si aspetta di tirare fuori oggetti Integer, mentre un'altra parte del programma può per errore passare una String, provocando un errore di esecuzione.

Una versione generica della classe Box[modifica]

Una classe generica è definita con il formato seguente:

  class name<T1, T2, ..., Tn> { /* ... */ }

La sezione del tipo di parametro, delimitato da parentesi angolari (<>) segue il nome della classe. Essa specifica il tipo dei parametri (detti anche variabili tipo) T1, T2, ..., e Tn.

Per modificare la classe Box ad usare i generici, create una dichiarazione di tipo generico cambiano il codice da "public class Box" a "public class Box<T>". Questo introduce la variabile tipo, T, che può essere usata ovunque all'interno della classe.

Con questa modifica, la classe Box diventa:

  /**
   * Generic version of the Box class.
   * @param <T> the type of the value being boxed
   */
  public class Box<T> {
      // T stands for "Type"
      private T t;
  
      public void set(T t) { this.t = t; }
      public T get() { return t; }
  }

Come potetet vedere, tutte le occorrenze di Object sono sostituite da T. Una variabile tipo può essere un qualsiasi tipo non primitivo che voi specificate; ogn tipo classe, ogni tipo Interfaccia, ogni tipo arrao o anche ogni altra variabile tipo.

La stessa tecnica può essere usata per creare interfacce generiche.

Convenzione sui nomi dei parametri tipo[modifica]

Per convenzione, in nomi dei parametri tipo sono al singolare, lettere maiuscole. Questa convenzione è in aperta violazione alla convenzione sull'attribuzione del nome delle variabili che già conoscete, e per una buona ragione: senza questa convenzione, sarebbe difficile distinguere la differenza tra variabili tipo e classi ordinarie o nomi di interfacce.

I nomi di parametro tipo più comunemente usati sono:

E - Elemento (usato estensivamente da Java Collections Framework) K - Key (chiave) N - Number (numero) T - Type (tipo) V - Value (valore) S,U,V etc. - 2nd, 3rd, 4th types

Vedrete questi nomi usati lungo la Java SE API e per il resto di questa lezione.

Invocazione e istanziazione di un tipo generico[modifica]

Per fare riferimento ad una classe generica Box all'interno di vostri programmi, dovere fare una invocazione di tipo generico, che sostituisce T con qualche valore concreto come, ad esempio, un Integer:


  Box<Integer> integerBox;

Potete pensare alla invocazione di un tipo generico essere simile alla invocazione di un metodo ordinario, ma invece di passare un argomento al metodo, passate un argomento tipo - Intero in questo caso - alla stessa classe Box.


Terminologia "Parametro Tipo o Argomento Tipo": molti sviluppatori usano i termini "parametro tipo" e "argomento tipo" scambievolmente, ma questi termini non indicano la stessa cosa. Quando si scrivono programmi, si forniscoo argomenti tipo per creare tipi parametrizzati. Perciò, la T in Foo<T> è un parametro tipo e la stringa String in Foo<String> f è un argomento tipo. In questa lezione si assume questa definizione quando si usano questi termini.


Come ogni altra dichiarazione di variabile, il codice non crea effettivamente un nuovo oggetto Box. Esso semplicemente dicheara che integerBox conterrà un riferimento a "Box di Integer", il che è come Box<Integer> viene letto.

Un'invocazione di un tipo generico è genericamente nota come un tipo parametrizzato.

Per istanziare questa classe, usate la nuova parola chiave, come al solito, ma scrivete <Integer> tra il nome della classe e le parentesi:

  Box<Integer> integerBox = new Box<Integer>();

Eclipse[modifica]

Problemi all'import[modifica]

Eclipse segnala che non riesce a trovare una classe, nella sezione di import?

Occorre cercare il package sul web (Google va bene), scaricare il file JAR e metterlo nella sottodirectory libs della cartella del nostro progetto.

Un buon posto dove mettere i jar[modifica]

Si potrebbero mettere dove si vogliono e poi aggiungere il percorso alla variabile di ambiente CLASSPATH, ma ho trovato più veloce metterli ad esempio qui, dove c'è una delle virtual machines:

  /usr/lib/jvm/java-7-oracle/jre/lib/ext

Pulire la cache[modifica]

  $ /usr/lib/jvm/java-7-oracle/bin/javaws -viewer

si aprono questi dialoghi, selezionare come da figura

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

Si clicca su Impostazioni

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

Si clicca su Elimina file

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

JVM da far partire per default[modifica]

Si digiti:

  marcob@js:/usr/lib/jvm$ sudo update-alternatives --config java
  Sono disponibili 4 scelte per l'alternativa java (che fornisce /usr/bin/java).
  
    Selezione    Percorso                                        Priorità  Stato
  ------------------------------------------------------------
    0            /usr/lib/jvm/java-7-oracle/jre/bin/java          1095      modalità automatica
    1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      modalità manuale
    2            /usr/lib/jvm/java-6-oracle/jre/bin/java          1092      modalità manuale
    3            /usr/lib/jvm/java-7-oracle/jre/bin/java          1095      modalità manuale
  * 4            /usr/lib/jvm/java-8-oracle/jre/bin/java          1094      modalità manuale

Groovy[modifica]

È un linguaggio agile e dinamico per JVM.

Fa parte del progetto Apache.

Eredita la robustezza da Java a anche caratteristiche potenti ispirate a linguaggio come Python, Ruby e Smalltalk.

A sentire loro è il linguaggio più figo del mondo.


Grails[modifica]

È un framework di sviluppo di applicazioni web per JVM basato sul linguaggio Groovy.

Dettagli qui

Bibliografia[modifica]

Difference between JRE and JVM (www.javatpoint.com)

Difference between JRE, JVM and JDK (www.javabeat.net)