谁能给个监视串口触发一个事件的框架??????在线等待!!!!!!!!1

xm_44 2003-07-28 03:02:09
请问:
我要实现监视一个串口的值,当检测到位某个值(比如1)时,触发一个事件event(我自己的事件),程序基本框架是如何的?
...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xm_44 2003-07-29
  • 打赏
  • 举报
回复
我主要是想知道如何用事件机制来实现串口监听,然后触发事件,对于读串口假设我已经用一个函数实现了,比如int getserialport(){...},通过这个函数我可以得到我想要的串口的值,当这个值为1时我要触发一个事件,这个过程我如何用事件机制来实现?
多谢!!!!
sinboy 2003-07-29
  • 打赏
  • 举报
回复
public class SerialPortHandle extends Thread implements SerialPortEventListener {
/**
* 增加串口侦听
* @param sPort 要侦听的串口号
* @throw TooManyListenerException 如果一个串口上有多于一个的侦听
* @throw IOException 在开辟读数据流时出错
*/
private void listenSerialPort(SerialPort sPort)
{

try{
br=new BufferedReader(new InputStreamReader(sPort.getInputStream()));

sPort.addEventListener(this);
sPort.notifyOnDataAvailable(true);//使发生的串口事件有效
}
catch(TooManyListenersException e){System.err.println(e.getMessage());}
catch(IOException e){System.err.println(e.getMessage());}

}

/**
* 处理侦听到的串口事件
* @param ev 串口事件
* @throw IOException 读写错误
*/
public synchronized void serialEvent(SerialPortEvent ev)
{

//如果有串口事件发生
if(ev.getEventType()==ev.DATA_AVAILABLE)

try{
while(true){

//在这里加入你的处理
respmsg=br.readLine();//在打开的读数据流中读一行数据
System.out.println("repmsg:"+respmsg);


}//while
}//try
catch(IOException e){
System.out.println(e.getMessage());}


}

}
beyondhuangjie 2003-07-29
  • 打赏
  • 举报
回复
留命!
huqp 2003-07-28
  • 打赏
  • 举报
回复
请看http://java.sun.com/products/javacomm/javadocs/API_users_guide.html
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;

/**
* 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;
SimpleRead reader = new SimpleRead();
}
}
}
if (!portFound) {
System.out.println("port " + defaultPort + " not found.");
}

}

/**
* Constructor declaration
*
*
* @see
*/
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();
}

/**
* 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;
}
}

}

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧