Lo slogan, coniato originariamente da Sun Microsystems per illustrare i benefici del linguaggio Java, vale a patto che:
Inserire dei path assoluti nel proprio sorgente è sempre fonte di problemi quando si scrive software multipiattaforma:
C:\Users\UserName\file — Non funzionerà su piattaforma *nix, e non funzionerà se l’utente Windows non è “UserName”.C:\MyProgram\file — Non funzionerà su piattaforma *nix, e non funzionerà se
l’installazione di Windows è sana e il software non è avviato con diritti di amministratore./home/username/file — Non funzionerà su piattaforma Windows, e non funzionerà se l’utente non è username.Java fornisce nella classe System un metodo
String getProperty(String p)
che consente di accedere a proprietà di sistema
file.separator — Restituisce \ per Windows e / per Unixjava.home — La directory di installazione di Javauser.dir — La directory da cui il comando java è stato invocatouser.home — Restituisce la home directory dell’utente che ha lanciato javauser.name — Restituisce il nome utentepublic static final String PROP_FILE_SEPARATOR = "file.separator";
String separator = System.getProperty(PROP_FILE_SEPARATOR);
java.version — La versione di java in uso. Si potrebbe decidere di non usare una funzionalità che si sa non esistere o essere buggata.os.arch — L’architettura della CPU come rilevata dall’OS (x86, i386, amd64, x86_64, IA64N, ARM, …)os.name — Il nome del sistema operativo (Linux, MacOS X, MacOS, Windows 10, Solaris, FreeBSD, …)os.version — Restituisce per Windows il numero di versione effettivo (per esempio, Windows 10 restituisce 10.0), per MacOS il numero di versione (per esempio, 10.3.4), per Linux la versione
del kernel (es. 6.1)Diversamente dagli anni 90, i dispositivi oggi hanno una densità di pixel per area estremamente variabile. Si va da 120 PPI (Pixel Per Inch) a 640 PPI, su schermi di dimensione estremamente variabile (da 3 a 200 pollici).
Piattaforme diverse, anche a parità di schermo, possono adottare diverse convenzioni:
Questi elementi sono stabiliti dal window manager (del windowing system del sistema utilizzato) e non dallo sviluppatore dell’applicazione. Come indicazione generale vale che un’applicazione ben sviluppata eredita il “look and feel” dal sistema su cui sta girando.


Sarebbe opportuno definire la UI una sola volta e cambiare dinamicamente le parti scritte (il testo) a seconda dell’impostazione della lingua di sistema (o della nostra applicazione).
In realtà anche per il formato dei numeri, la valuta, le convenzioni sulla data, …
en_US_UNIX (lingua inglese, Stati Uniti, piattaforma UNIX)Java fornisce una architettura per l’internazionalizzazione (i18n = internationalization), che fa uso di ResourceBundle e di una serie di file di supporto (properties files).
Per approfondimenti (per implementare il supporto multilingua):