Tips&Tricks I trucchi del mestiere

 

Comunicazione seriale e parallela


Un trucco per aprire, e mettersi in ascolto, su una porta seriale o parallela in Java. NellÆesempio viene mostrato un esempio che utilizza la porta seriale COM1.
Per questa operazione Φ necessario: scaricare il package Java Communication API (javax.com) http://java.sun.com/products/javacomm/index.html e copiare: win32com.dll in \bin, comm.jar in \lib, javax.comm.properties in \lib e in \jre\lib. Infine aggiungere comm.jar nel classpath: set CLASSPATH=c:\jdk1.1.6\lib\comm.jar;%classpath%.
Il codice Φ presente in formato sorgente nel cd-rom allegato alla rivista e/o sul sito web di ioProgrammo (www.ioprogrammo.it) Tip fornito dal sig. P.Orsini

import java.io.*;
import javax.comm.*;
import java.util.*;

public class Com implements Runnable,SerialPortEventListener{	
	
	//Dichiarazioni variabili
	static CommPortIdentifier portId;
    static Enumeration portList;
	  
    SerialPort serialPort;
    Thread readThread;	
    private InputStream serialInput;	
		
	public static void main(String[] arg) throws Exception{	
		
		//Richiede la lista delle porte disponibili
		portList=CommPortIdentifier.getPortIdentifiers();
			
		// Cerca fra le porte disponibili quella richiesta
		//finchΦ c'Φ ancora una porta nella lista
		while (portList.hasMoreElements()){
			
			//Prende un porta dalla lista
			portId=(CommPortIdentifier) portList.nextElement();
        	
        	// Controlla che la porta presa in considerazione sia
        	//una porta seriale ed in particolare la COM1
        	// Per le porte parallele utilizzare:
        	//CommPortIdentifier.PORT_PARALLEL
        	if ((portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
        	    && (portId.getName().equals("COM1"))){
        		
        	    System.out.println("Porta trovata");
        		
        		new Com();
        		break;			
        	}
         }
	    } 	
   
	    
	  public Com() throws Exception{
	  	
	  	//Apre la porta con un timeout di 2sec (2000 msec)
	  	serialPort=(SerialPort) portId.open("RS232",2000);
     	
     	//Associa un evento all'input dalla porta
     	serialPort.addEventListener(this);
     	serialPort.notifyOnDataAvailable(true);
     	
     	//Setta i parametri della porta
     	serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
		serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN);
		
		//Apre un canale di comunicazione
		serialInput=serialPort.getInputStream();
     	
     	System.out.println("Porta aperta");
     	
     	//Avvia il thread per l'ascolto
     	readThread = new Thread(this);
        readThread.start();
         
     }
     
     //Thread in ascolto sulla tastiera
     public void run(){
     	
     	try{
     		
     		BufferedReader tastiera=new BufferedReader(new 
     		InputStreamReader(System.in));
     	
     		//Attesa comando quit
     		while (!(tastiera.readLine().equals("quit")));
     		
     		//Chiusura porta 
     		serialPort.close();
     	}
     	catch (Exception e){
     		 	System.out.println(e);}
     }
     	
     	
     public void serialEvent(SerialPortEvent event){
     	
     	//Verifica la presenza di dati nel buffer
     	if (event.getEventType()==SerialPortEvent.DATA_AVAILABLE){
     	
     		try{
     			//Legge i dati dal buffer (se presenti)
     			while(serialInput.available()>0) 
     			      System.out.print((char)serialInput.read()); 								
     		} 
     		catch (Exception e){
     			System.out.println(e);
	  		}
     	}
     }
}



Da componente a JPEG


Attraverso poche righe di codice Φ possibile salvare un nostro componente come immagine JPEG. Il codice Φ presente in formato sorgente nel cd-rom allegato alla rivista e/o sul sito web di ioProgrammo (www.ioprogrammo.it)
Tip fornito dal sig. M.Rapa


import java.io.OutputStream; import java.io.FileOutputStream; import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg.JPEGCodec; import java.awt.Component; import java.awt.image.BufferedImage; import java.awt.Dimension; import java.awt.Graphics2D; public class ComponentToJPEG { /** * * @param myComponent * @param filename */ public static void saveComponentAsJPEG(Component myComponent, String filename) { Dimension size = myComponent.getSize(); BufferedImage myImage =new BufferedImage(size.width, size.height,BufferedImage.TYPE_INT_RGB); Graphics2D g2 = myImage.createGraphics(); myComponent.paint(g2); try { OutputStream out = new FileOutputStream(filename); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(myImage); out.close(); } catch (Exception e) { System.out.println(e); } } }