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 e’ necessario: scaricare il package Java Communication API (javax.com) http://java.sun.com/products/javacomm/index.html e copiare: win32com.dll in <JDK>\bin, comm.jar in <JDK>\lib, javax.comm.properties in <JDK>\lib e in <JDK>\jre\lib. Infine aggiungere comm.jar nel classpath:
set CLASSPATH=c:\jdk1.1.6\lib\comm.jar;%classpath%
Il codice e’ 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 e’ possibile salvare un nostro componente come 
immagine JPEG. Il codice e’ 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);
    }
  }
}