Post

Visualizzazione dei post da ottobre, 2012

Java Reflection: accesso a metodi e campi privati

DOMANDA: Come si può accedere da un classe generica ai metodi e alle variabili di istanza private di un'altra classe? RISPOSTA: Genericamente non è possibile accedere ai campi o metodi privati  di un'altra classe. Ma g enericamente non vuol dire in modo assoluto! Infatti, grazie alla Reflection Java possiamo accedere ai campi privati di un'altra classe. Analizziamo alcuni metodi che ci mette a disposizione la classe java.lang.Class : getFields() : permette di recuperare la lista di tutti i campi pubblici della classe e della sua superclasse; getDeclaredFields() : fornisce la lista di tutti i campi presenti nella classe (senza distinzione di visibilità); getDeclaredMethods() : come sopra ma applicato ai metodi; getDeclaredField(String nome) : restituisce il Field indicato come parametro (senza distinzione di visibilità); getDeclaredMethos(String nome) : restituisce il Method indicato come parametro (senza distinzione di visibilità). Guardiamo l&

Java 7: Multicatch

DOMANDA: In un try/catch c'è modo di scrivere più eccezioni nello stesso catch evitando così codice ridondante nel caso di stesso comportamento? RISPOSTA: Fino a Java 6 succede una cosa alquanto scomoda nell'utilizzo del try/catch : quando ci troviamo di fronte ad un codice che ha lo stesso comportamento con diverse eccezioni , siamo costretti a dover ripetere lo stesso codice più volte dentro diversi catch . Guardiamo nel dettaglio un esempio in cui posso avere due eccezioni a runtime : una NumberFormatException qualora inserisca in input un formato non compatibile con la conversione in int (ad esempio delle lettere), oppure una ArithmeticException qualora inserisca un numero non compreso nell'intervallo 0 e 5 (estremi esclusi): package multicatch; import java.util.Scanner; public class OldCatch { public static void main(String args[]) { try { Scanner scanner = new Scanner(System.in); String number = scanner.next(); scanner.clos

Creare una finestra di scelta file con JFileChooser

Immagine
DOMANDA: Come si fa a visualizzare una finestra per la scelta di un file in Java? RISPOSTA: Java mette a disposizione la classe javax.swing.JFileChooser che permette di aprire con poche righe di codice una finestra di selezione (Dialog) per i file . Guardiamo l'esempio con la classe FileDialog : package file; import java.io.File; import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; public class FileDialog { public static void main(String[] args) { // impostazione della directory di partenza JFileChooser fileScelto = new JFileChooser("C:\\"); // creazione di due filtri FileFilter filtroJpg = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg"); FileFilter filtroTxt = new FileNameExtensionFilter("TXT file", "txt"); // inserisco nella scelta del tipo di file un filtro TXT fileScelto.

Visualizzare la data di ultima modifica di un file

DOMANDA: Come si visualizza la data dell'ultima modifica di un file in Java? RISPOSTA: Tra le tante possibilità offerte dalla classe java.io.File , vi è anche quella di visualizzare l' ultima modifica di un file . Guardiamo subito con un esempio quanto è semplice: package file; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; public class UltimaModifica {   public static void main(String args[]) {     try {        File file = new File("C:\\image.jpg");        if(file.exists()) {          // recupero la data di ultima modifica          long ultimaMod = file.lastModified();          Date data = new Date(ultimaMod);          // formatto la data          SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/YYYY HH:mm:ss");          String dataMod = dateFormat.format(data);          System.out.println("Ultima modifica del file " + file.getName() + ": " + dataMod);        } else {        

Java System Properties

DOMANDA: In Java si possono ricavare le proprietà di sistema a runtime? RISPOSTA: Per personalizzare a runtime i programmi, evitare di scrivere codice non multipiattaforma o semplicemente ricavare le informazioni specifiche di un calcolatore è necessario conoscere la possibilità fornita da Java di recuperare i dettagli del sistema su cui è in esecuzione il nostro programma. Le possibilità offerte dalle Java System Properties sono quelle elencate nella seguente tabella: System property Descrizione java.version Versione Java Runtime Environment (JRE) java.vendor Fornitore Java Runtime Environment (JRE) java.vendor.url URL fornitore Java java.home Directory di installazione Java java.vm.specification.version Versione delle specifiche della Java Virtual Machine java.vm.specification.vendor Fornitore delle specifiche della Java Virtual Machine java.vm.specification.name Nome delle specifiche della Java Virtual Machine java.vm.version Versione dell'implementazion

Keywords: Volatile - Descrizione ed esempio

DOMANDA: Cosa significa la keyword volatile in Java? RISPOSTA: La keyword volatile è di solito associata ad una variabile il cui valore viene salvato e ricaricato in memoria ad ogni accesso senza utilizzare i meccanismi di caching . Spesso viene utilizzata quando differenti threads devono accedere ad una stessa variabile. Nell'esempio di seguito, non dichiarare la variabile volatile potrebbe portare il primo Thread a non terminare mai: package volatiletest; public class VolatileTest { volatile boolean running = true; // da notare la parola chiave volatile public void test() { // lancio un primo Thread new Thread(new Runnable() { public void run() { int counter = 0; while (running) counter++; System.out.println("Thread 1 concluso. Contatore = " + counter); } }).start(); // lancio il secondo Thread new Thread(new Runnable() { public void run() {