Oppure

Loading
24/01/06 15:43
Lodovica
Ciao a tutti sono tornata :)
ho questo codice per leggere da seriale:
package PortCom;

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

/**
 * <p>
 * Title:
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2004
 * </p>
 * <p>
 * Company:
 * </p>
 * 
 * @author not attributable
 * @version 1.0
 */
/*
 * Questa classe permette di leggere dalla porta seriale il cui nome ?
 * specificato nel costruttore della stessa.
 */

public class LeggiCOM extends Thread implements SerialPortEventListener {

	// Riferimento all'InputStream da cui leggere
	private InputStream in;

	// Crea un oggetto che legge dalla porta seriale
	// specificata nel costruttore

	public LeggiCOM(String port) {
		try {
			// Prendiamo il descrittore della porta scelta.
			// Nel caso in cui la porta non esista verr? sollevata una
			// eccezione di tipo NoSuchPortException.
			CommPortIdentifier id_porta;
			id_porta = CommPortIdentifier.getPortIdentifier(port);

			// Proviamo a prendere l'ownership della porta data.
			// Nel caso in cui la porta sia gi? occupata verr? sollevata
			// una eccezione di tipo PortInUseException

			CommPort porta = id_porta.open("LeggiCOM", 200);

			// Otteniamo un riferimento all'InputStream della porta
			in = porta.getInputStream();

			// Impostiamo le propriet? di comunicazione nel
			// seguente modo:
			// baudrate 9600
			// dataBits DATABITS_8
			// stopBits DATABITS_1
			// parity PARITY_NONE

			// Nel caso in cui i valori impostati non
			// siano supportati verr? sollevata una eccezione di
			// tipo UnsupportedCommOperationException

			SerialPort porta_seriale = (SerialPort) porta;
			porta_seriale.setSerialPortParams(9600, SerialPort.DATABITS_8,
					SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

			// Ci poniamo in ascolto di eventi sulla porta.
			// Solamente un oggetto si pu? registrare come
			// ascoltatore per cui bisogna gestire l'eccezione
			// TooManyListenersException

			porta_seriale.addEventListener(this);

			// Avviamo il processo di lettura
			start();
		}

		catch (NoSuchPortException ne) {
			System.out.println("La porta " + port + " non e' presente");
		}

		catch (PortInUseException pe) {
			
			System.out.println("La porta " + port + " ? occupata da "
					+ pe.currentOwner);
		}

		catch (UnsupportedCommOperationException ue) {
			System.out.println("La porta non supporta le propriet? impostate");
		}

		catch (IOException ioe) {
			System.out.println("Errore di IO");
		}

		catch (java.util.TooManyListenersException tme) {
			System.out.println("Si pu? registrare solamente un ascoltatore");
		}
		// fine try/catch

	}

	// Rappresenta il corpo del Thread di lettura

	public void run() {
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
		}
	}// fine run

	public void serialEvent(SerialPortEvent event) {
		switch (event.getEventType()) {
		case SerialPortEvent.BI:
		case SerialPortEvent.OE:
		case SerialPortEvent.FE:
		case SerialPortEvent.PE:
		case SerialPortEvent.CD:
		case SerialPortEvent.CTS:
		case SerialPortEvent.DSR:
		case SerialPortEvent.RI:
		case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
			break;
		case SerialPortEvent.DATA_AVAILABLE:
			byte[] readBuffer = new byte[20];
			try {
				while (in.available() > 0) {
					int numBytes = in.read(readBuffer);
				}
				System.out.print(new String(readBuffer));
			} catch (IOException e) {
			}
			break;
		}// fine switch
	}// fine serialEvent

	public static void main(String[] args) {

		System.out.println("Usage java LeggiCOM");
		LeggiCOM leggi = new LeggiCOM("COM1");
		String tmp_ss = ""
				+ (javax.comm.CommPortIdentifier.getPortIdentifiers())
						.hasMoreElements();
		System.out.println("ID COM: " + tmp_ss);

	}// fine main

}// fine



ma mi da errore riguardo a:
Unknown Windows Application.?

aaa
25/01/06 17:55
pierotofy
Alla fine come hai risolto?
Il mio blog: piero.dev
26/01/06 8:45
Lodovica
B? in realt? il problema era che windows si metteva in ascolto sulla COM1 perch? evidentemente si rendeva conto che io avevo attaccato una periferica e ci faceva girare qualche processo...
Per risolvere alla fine ? bastato staccare la periferica e riattacarla semplicemente.. cos? il processo di windows ha smesso di girare sulla periferica e io ho potuto leggere da seriale :)
aaa