Tips&Tricks I trucchi del mestiere

 




Come interagire con un database Access

Java realizza le connessioni ai database attraverso il componente noto come JDBC. PoichΘ Java Φ multipiattaforma, tale insieme di API fornisce funzionalitα generiche per l'accesso alle fonti condivise, indipendentemente dal loro formato. Il trucco Φ abbastanza semplice: JDBC fa da "tramite" tra un'applicazione Java ed il DBMS che si intende sfruttare, spesso attraversando anche altri collegamenti interni. Per testare la connessione con gli archivi di Access, realizzate un archivio chiamato miodatabase.mdb, e al suo interno create una tabella nominata Persone, suddivisa in quattro campi: ╖ ID, un banale contatore usato come chiave primaria. ╖ Nome, di tipo testuale. ╖ Cognome, di tipo testuale. ╖ Indirizzo, di tipo testuale. Quindi popolate la tabella qualche dato arbitrario. A questo punto Φ necessario far riconoscere al sistema operativo il database, in modo che possa essere introdotto tra le fonti di dati ODBC gestite. Per far ci≥, Φ necessario configurare un DSN. L'operazione Φ semplice: 1. Dal "pannello di controllo" di Windows accedete alla voce "origine dati ODBC". 2. Selezionate "aggiungi" nella scheda "DSN utente". 3. Scegliete, dall'elenco presentato, il driver di Access, identificato solitamente dalla dicitura "Microsoft Access Driver (*.mdb)". 4. Nella maschera ora presentata, immettete i dati necessari per la creazione del DSN. Usate il nome MioDatabase, inserite una descrizione a piacere, e con il pulsante "seleziona" collegate il DSN al file miodatabase.mdb precedentemente creato. 5. Confermate ogni operazione effettuata, salvando cos∞ il DSN utente creato. Ora la base di dati Φ ufficialmente riconosciuta dal sistema operativo, e JDBC pu≥ accedervi sfruttando, come tramite, il driver ODBC del sistema. In casi come questo, infatti, si parla di ponte JDBC-ODBC. Le classi Java che permettono l'accesso ai database sono contenute nel package java.sql. Sul Φ presente un esempio in grado di sfruttare il database di Access appena registrato nel sistema: Trucco fornito da Carlo Pelliccia
import java.sql.*;
class JavaDatabase {

  public static void main(String[] args) {
    try {
      // Carico il driver JDBC-ODBC
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      // Apro una connessione con il database
      Connection con = DriverManager.getConnection(
        "jdbc:odbc:MioDatabase"
      );
      // Preparo l'oggetto che mi permetterα
      // l'utilizzo di SQL
      Statement stat = con.createStatement();
      // Eseguo l'interrogazione, ottentendo
      // un oggetto ResultSet come risultato
      ResultSet res = stat.executeQuery(
        "SELECT * FROM Persone"
      );
      // Scorro ogni record presente e stampo
      // l'output sul video
      while (res.next()) {
        System.out.println(
          res.getString("Nome") + ", " +
          res.getString("Cognome") + ", " +
          res.getString("Indirizzo")
        );
      }
      // Chiudo il ResultSet
      res.close();
      // Chiudo lo Statement
      stat.close();
      // Chiudo la connessione
      con.close();
    } catch (Exception e) {
      System.out.println("Problema: " + e.toString());
    }
  }
  
}

Come eseguire clip sonori in Java

Utilizzando le Java Sound API Φ possibile caricare ed eseguire dei clip sonori in vari formati all'interno delle proprie applicazioni. La classe Sounds, qui sotto, mostra come fare. Pu≥ essere utilizzata creandone un'istanza all'interno del proprio programma, passando al costruttore un array di stringhe rappresentanti i nomi dei diversi file sonori da caricare (ad esempio "nomeClip.wav"). Diventa quindi possibile eseguire un determinato clip lanciando il metodo play(numeroClip). Nel momento in cui i clip sonori caricati non risultino pi∙ necessari, Φ possibile chiuderli tutti insieme utilizzando il metodo closeClips(). Trucco fornito da Carlo Pelliccia
import java.io.*;
import javax.sound.sampled.*;

class Sounds {

  Clip[] clips;

  public Sounds(String[] files) {
    clips = new Clip[files.length];
    for (int i = 0; i < clips.length; i++)
      try {
        clips[i] = loadClip(files[i]);
      } catch (Exception e) {}
  }

  private Clip loadClip(String s) throws Exception {
    File file = new File(s);
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
    AudioFormat audioFormat = audioInputStream.getFormat();
    DataLine.Info info = new DataLine.Info(
      Clip.class,
      audioInputStream.getFormat(),
      (int)audioInputStream.getFrameLength() * audioFormat.getFrameSize()
    );
    Clip clip = (Clip)AudioSystem.getLine(info);
    clip.open(audioInputStream);
    return clip;
  }

  public void play(int i) {
    if (i<0 || i>=clips.length) return;
    if (clips[i]==null) return;
    clips[i].stop();
    clips[i].setMicrosecondPosition(0);
    clips[i].start();
  }

  public void closeClips() {
    for (int i = 0; i < clips.length; i++)
      if (clips[i]!=null) {
        clips[i].stop();
        clips[i].close();
      }
  }
}
        
      


Come creare uno splash screen

Molte applicazioni, al loro avvio, mostrano uno "splash screen", ossia una finestra contenente un logo ed alcune informazioni, che intrattengono l'utente mentre il software viene caricato e predisposto per l'utilizzo. Applicazioni che ne fanno uso, ad esempio, sono Netscape, Word e Outlook Express. Uno splash screen si distingue da una normale finestra per via del fatto che non contiene elementi come la barra del titolo, i contorni e il pulsante di chiusura. Uno splash screen, inoltre, scompare automaticamente a caricamento completato, oppure dopo un determinato numero di secondi. In Java Φ possibile replicare tale comportamento usando la classe Window dell'AWT. Non Φ possibile usare Frame, poichΘ questa classe fornisce una finestra giα popolata con diversi elementi. Ecco un esempio, che mostra l'immagine "splash.jpg", in qualitα di splash screen, per dieci secondi: Trucco fornito da Carlo Pelliccia
class SplashScreenTest extends Window {
 
 String imgName = "splash.jpg";
 
 Image splashImage;
 
 public SplashScreenTest() {
  super(new Frame());
  // Carica l'immagine
  splashImage = Toolkit.getDefaultToolkit().getImage(imgName);
  // Usa un MediaTracker
  MediaTracker mt = new MediaTracker(this);
  mt.addImage(splashImage,0);
  try {
   mt.waitForID(0);
  } catch (InterruptedException e) {}
 }
 
 public void showSplashScreen() {
  // Calcola le dimensioni
  int w = splashImage.getWidth(null);
  int h = splashImage.getHeight(null);
  // Dimensiona la finestra
  setSize(w,h);
  // Centra la finestra sullo schermo
  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  setLocation((d.width - w) / 2,(d.height - h) / 2);
  // Mostra la finestra
  setVisible(true);
 }
 
 public void hideSplashScreen() {
  setVisible(false);
  dispose();
 }
 
 public void paint(Graphics g) {
  g.drawImage(splashImage,0,0,null);
 }
 
 public static void main(String args[]) {
  SplashScreenTest sst = new SplashScreenTest();
  sst.showSplashScreen();
  try {
   Thread.sleep(10000);
  } catch (InterruptedException e) {}
  sst.hideSplashScreen();
  System.exit(0);
 }
 
}