Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Java Communications API (un po' lungo ma spero che sia chiaro)

0 views
Skip to first unread message

Marco Guidi

unread,
Oct 7, 2002, 1:48:08 PM10/7/02
to
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;
}
}
}

Fabrizio Camera

unread,
Oct 7, 2002, 5:37:46 PM10/7/02
to
On 7 Oct 2002 10:48:08 -0700, Marco Guidi wrote:

>Ho scaricato le cosiddette Java communications API dal sito della Sun.
>Purtroppo non riesco a capire cosa devo fare per poterle utilizzare.

[CUT]


>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

E perché non hai fatto come veniva richiesto?
In particolare, perché comm.jar non l'hai messo in lib\ext?

>Pero` sembra che qualche classe (presumo qualche classe che sta in
>comm.jar) non venga trovata a run time.
>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.

Marco Guidi

unread,
Oct 8, 2002, 12:02:51 PM10/8/02
to
Fabrizio Camera <f.came...@Mtiscali.it> wrote in message news:<MPG.180c1d73f...@powernews.libero.it>...

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

Fabrizio Camera

unread,
Oct 10, 2002, 6:11:35 AM10/10/02
to
On 8 Oct 2002 09:02:51 -0700, Marco Guidi wrote:

>Il problema è che nella versione di java che mi sono scaricato
>io quelle directory che vengono indicate non ci sono.

Permettimi di dubitare: forse cerchi nel posto sbagliato?

>Non pensavo di doverle creare io.

Anche questo non è necessario: alternativamente a lib\ext puoi inserire
i file nel CLASSPATH (come d'altra parte è scritto nella
documentazione).

>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.

[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 ;-)

0 new messages