Fórum serial #415774
23/04/2012
0
coloqueo o rxtx na pasta do jdk/jre/lib/ext
import gnu.io.*;
import java.io.*;
import java.util.*;
public class serial implements Runnable, SerialPortEventListener {
static CommPortIdentifier portId;
static Enumeration portList;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
/**
* Method declaration
*
*
* @param args
*
* @see
*/
public static void main(String[] args) {
boolean portFound = false;
String defaultPort = /dev/term/a;
if (args.length > 0) {
defaultPort = args[0];
}
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (portId.getName().equals(defaultPort)) {
System.out.println(Found port: +defaultPort);
portFound = true;
//serial reader = new serial();
}
}
}
if (!portFound) {
System.out.println(port + defaultPort + not found.);
}
}
/**
* Constructor declaration
*
*
* @see
*/
public serial() {
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();
}
/**
* Method declaration
*
*
* @see
*/
public void run() {
try {
Thread.sleep(20000);
} catch (InterruptedException e) {}
}
/**
* Method declaration
*
*
* @param event
*
* @see
*/
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;
}
}
}
Exception in thread main java.lang.UnsupportedClassVersionError: serial : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: serial. Program will exit.
Ronaldo Garcia
Curtir tópico
+ 0Posts
24/04/2012
Ronaldo Garcia
Estou precisando de ajuda com referencia a comunicação serial, pois ja peguei alguns exemplos e tive a infelicidade ou falta de conhecimento quanto a ler dados na porta serial.
o erro abaixo é refernte a classe SimpleRead.java
quando executo pelo eclipse retorna esse erro.
fico no aguardo.
Exception in thread main java.lang.UnsupportedClassVersionError: SimpleRead : Unsupported major.minor version 51.0
Gostei + 0
24/04/2012
Robson Teixeira
espero ter ajudado.
att
robson
Gostei + 0
24/04/2012
Edson Melo
pessoal, a saida paralela dos computadores, ja não existe mais, a saida serial esta indo pelo mesmo caminho, porque então continuar a usar, ou desenvolver sistemas utilizando esta opções fadada ao fim, todas elas estão indo para a USB, não seria mais logico, começar mos a pensar nas USB como porta de Comunicação, ou sera que USB e Serial seriam compativeis.
Não me entendam mal, não quero desencorajar nada, mas e para se pensar no que falei, e evitaria dores de cabeça futura na hora que a porta Serial for abandonada como foi a Paralela.
ate breve
Gostei + 0
26/04/2012
Ronaldo Garcia
Sistema atual é todo em cobol e sistema de comunicação é serial, então penso em trafegar nos dois sentitos, rede normal com RJ45 e serial, após cincronizar dados e quando estiver 100%, cortar esse tipo de comunicação, estou estudando isso mas não consegui nada concreto.
obrigado pela compreenção, e não te enterpretei mau. um abraço!
Gostei + 0
26/04/2012
Daniel
Meu amigo Ronaldo, tenta usar o código que te enviei abaixo. Precisa da lib rxtxcomm que deve ser a mesma que vc está suando. Lembrando que deve ter a lib correspondente ao seu sistema operacional respeitando o tamanho da palavra com que ele trabalha (se é 64 ou 32 bits). Vc precisa usá-la da seguinte maneira. Provavelmente seu outro código foi compilado em uma versão superior ao jre que vc tem instalado. Compila este código lembrando de adicionar o método main chamando o connect e alterar o número da sua porta e parâmetros de comunicação para o dispositivo.
Copie para RXTXcomm.jar ---> <JAVA_HOME>\jre\lib\ext
Copie rxtxSerial.dll ---> <JAVA_HOME>\jre\bin
Código:
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
*
* @author dmrocha
*/
public class TwoWaySerialComm {
public TwoWaySerialComm() {
super();
}
void connect(String portName) throws Exception {
CommPortIdentifier portIdentifier =
CommPortIdentifier.getPortIdentifier(portName);
if (portIdentifier.isCurrentlyOwned()) {
System.out.println(Error: `port is currently in use);
} else {
CommPort commPort = portIdentifier.open(this.getClass().getName(), 2000);
if (commPort instanceof SerialPort) {
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
(new Thread(new SerialReader(in))).start();
(new Thread(new SerialWriter(out))).start();
} else {
System.out.println(Error: only serial ports are handled by this example.);
}
}
}
void disconnect (String portName) throws Exception
{
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if (portIdentifier.isCurrentlyOwned()){
CommPort commPort = portIdentifier.open(this.getClass().getName(), 2000);
commPort.close();
}
}
public static class SerialReader implements Runnable {
InputStream in;
public SerialReader(InputStream in) {
this.in = in;
}
public void run() {
byte[] buffer = new byte[1024];
int len = -1;
try {
Principal principal = new Principal();
while ((len = this.in.read(buffer)) > -1) {
System.out.print(new String(buffer, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static class SerialWriter implements Runnable {
OutputStream out;
public SerialWriter(OutputStream out) {
this.out = out;
}
public void run() {
try {
int c = 0;
while ((c = System.in.read()) > -1) {
this.out.write(c);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Gostei + 0
26/04/2012
Ronaldo Garcia
Gostei + 0
26/04/2012
Edson Melo
mas me alegro por ter uma visao da evolução e nao ficar pensando em tecnologias ja quase ultarpassadas, pois estão surgindo nmovas que com certesa substituirão as atuais , e porque não ja nos preparar mos para um futuro, que creio sera melhor.
desculpem me pela intromissao, se todos pensassem do mesmo modo , não havia problemas sem solução não e
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)