Newsgroup: it.comp.java
Titolo: Java Communications API (un po' lungo ma spero che sia chiaro)

Salve. Ho di nuovo qualche problema con java... Prima o poi imparero` 
(speriamo prima)
Ho scaricato le cosiddette Java communications API dal sito della Sun.
Purtroppo non riesco a capire cosa devo fare per poterle utilizzare.
Infatti sul sito Sun ho trovato un paio di semplici esempi. Riporto
alla
fine il codice di uno dei due. 
Il problema č che dopo la compilazione, quando provo a lanciare il
programma
ottengo il seguente errore quando provo a far partire il programma
C:\J2SDKE~1.1\commapi\samples\Simple>java SimpleRead
Exception in thread "main" java.lang.NoClassDefFoundError:
javax/comm/SerialPortEventListener
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:486)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:111)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:248)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
In giro per internet ho trovato scritto che
se si usa java sotto windows, per poter utlizzare le Communications
API si
devono copiare i file comm.jar, win32com.dll e javax.comm.properties
in
opportune directories come riporto di seguito. 
C> copy win32com.dll \jdk1.2.2\jre\bin
C> copy comm.jar \jdk1.2.2\jre\lib\ext
C> copy javax.comm.properties \jdk1.2.2\jre\lib
Ora, io uso j2sdkee1.3.1 su windows 2000  e ho copiato
comm.jar               in c:\j2sdkee1.3.1\lib
javax.comm.properties  in c:\j2sdkee1.3.1\lib
win32com.dll           in c:\winnt\system32
Pero` sembra che qualche classe (presumo qualche classe che sta in
comm.jar) non venga trovata a run time.
cosa ho sbagliato ?
Ho anche provato a definire una variabile CLASSPATH contenente il 
path completo del file comm.jar ma sembra che a quel punto nessun 
programma riesca piů a partire. Devo forse inserire in CLASSPATH anche
i vari .jar che si trovano in c:\j2sdkee1.3.1\lib e qualsiasi altro
.jar (o jre) io voglia utilizzare ? Se qualcuno mi puň chiarire
qualcosa su cosa deve stare in CLASSPATH gli sarei molto grato.
Grazie in anticipo,
Marco Guidi.
import java.io.*;
import java.util.*;
import javax.comm.*;
public class SimpleRead implements Runnable, SerialPortEventListener {
    static CommPortIdentifier portId;
    static Enumeration portList;
    InputStream inputStream;
    SerialPort serialPort;
    Thread readThread;
    public static void main(String[] args) {
        portList = CommPortIdentifier.getPortIdentifiers();
        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
            if (portId.getPortType() ==
CommPortIdentifier.PORT_SERIAL) {
                // if (portId.getName().equals("COM1")) {
                if (portId.getName().equals("/dev/term/a")) {
                    SimpleRead reader = new SimpleRead();
                }
            }
        }
    }
    public SimpleRead() {
        try {
            serialPort = (SerialPort) portId.open("SimpleReadApp",
2000);
        } catch (PortInUseException e) {}
        try {
            inputStream = serialPort.getInputStream();
        } catch (IOException e) {}
	try {
            serialPort.addEventListener(this);
	} catch (TooManyListenersException e) {}
        serialPort.notifyOnDataAvailable(true);
        try {
            serialPort.setSerialPortParams(9600,
                SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {}
        readThread = new Thread(this);
        readThread.start();
    }
    public void run() {
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {}
    }
    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 (inputStream.available() > 0) {
                    int numBytes = inputStream.read(readBuffer);
                }
                System.out.print(new String(readBuffer));
            } catch (IOException e) {}
            break;
        }
    }
}

cosa ho sbagliato ?
A non seguire le istruzioni (che sono anche allegate al pacchetto).
Rileggi quello che hai scritto e confronta i path...
HTH
-- 
Ciao
	Fabrizio C.

...

Il problema è che nella versione di java che mi sono scaricato
io quelle directory che vengono indicate non ci sono. Non pensavo di doverle
creare io. Riporto ad esempio il contenuto della seguente directory da cui
si capisce chiaramente ad esempio che non c'e` nessuna directory jre.
Analogamente non c'e` alcuna directory j2sdkee1.3.1\lib\ext.
Comunque grazie per la risposta.
Marco Guidi
C:\>dir j2sdkee1.3.1
 Volume in drive C has no label.
 Volume Serial Number is AC7B-B737
 Directory of C:\j2sdkee1.3.1
10/07/2002  07:13p      <DIR>          .
10/07/2002  07:13p      <DIR>          ..
10/01/2002  02:48p      <DIR>          bin
10/01/2002  02:48p      <DIR>          cloudscape
10/07/2002  07:13p      <DIR>          commapi
10/01/2002  02:48p      <DIR>          conf
10/01/2002  02:48p      <DIR>          config
10/01/2002  02:48p      <DIR>          connector
01/17/2002  03:52a               1,140 COPYRIGHT.txt
10/01/2002  02:48p      <DIR>          doc
10/01/2002  02:48p      <DIR>          help
10/01/2002  02:48p      <DIR>          images
10/07/2002  07:22p      <DIR>          lib
01/17/2002  03:52a               9,831 LICENSE.txt
10/01/2002  02:48p      <DIR>          logs
10/01/2002  02:48p      <DIR>          nativelib
10/01/2002  02:48p      <DIR>          public_html
01/17/2002  03:52a                 756 README.txt
10/01/2002  02:48p      <DIR>          repository
10/01/2002  02:48p             162,658 Uninst.isu
10/01/2002  02:48p      <DIR>          xsl
               4 File(s)        174,385 bytes
              17 Dir(s)   3,547,377,664 bytes free

Analogamente non c'e` alcuna directory j2sdkee1.3.1\lib\ext.
[CUT]
Ovvio. Ma avrai un'altra directory contenente il jdk Standard Edition 
(ce l'hai, vero?): altrimenti ho l'impressione che non ti funzionerà 
nulla ;-)
