java调用 COM接口基本配置操作

串口连接好了,剩下的就是写程序了
   
    1.准备
   
    下载Communication包
   
    下载地址如下:http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip.
   
    2.配置
   
    解压缩javacomm20-win32.zip

 
   
    把win32com.dll拷贝到{JAVA_HOME}\jre\bin
   
    把comm.jar拷贝到{JAVA_HOME}\jre\lib\ext
   
    把javax.comm.properties拷贝到{JAVA_HOME}\jre\lib
   
    再环境变量的CLASSPATH中添加一项:{JAVA_HOME}\jre\lib\ext\comm.jar;
   
    我的CLASSPATH添加后为:
   
    .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\ext\comm.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\jtds.jar;%Tomcat_Home%\common\lib\servlet-api.jar;
   

    3.列举出本机所有可用串口
   
    void listPortChoices() {
   
    CommPortIdentifier portId;
   
    Enumeration en = CommPortIdentifier.getPortIdentifiers();
   
    // iterate through the ports.
   
    while (en.hasMoreElements()) {
   
    portId = (CommPortIdentifier) en.nextElement();
   
    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
   
    System.out.println(portId.getName());
   
    }
   
    }
   
    portChoice.select(parameters.getPortName());
   
    }
   
    以上代码可以列举出当前系统所有可用的串口名称,我的机器上输出的结果是COM3和COM4.
   
    4.下载串口调试程序
   
    下载地址:http://www.onlinedown.net/soft/54540.htm
   
    安装后,它会自动辨认计算机的端口,如果电脑没有串口,会提示:"串口不存在,或被占用"
   
    5.程序
   
    package cn.edu.lzjtu.comm;
   
    import java.io.IOException;
   
    import java.io.InputStream;
   
    import java.util.Iterator;
   
    import java.util.List;
   
    import java.util.TooManyListenersException;
   
    import javax.comm.CommPortIdentifier;
   
    import javax.comm.PortInUseException;
   
    import javax.comm.SerialPort;
   
    import javax.comm.SerialPortEvent;
   
    import javax.comm.SerialPortEventListener;
   
    import javax.comm.UnsupportedCommOperationException;
   
    public class Readstr {
   
    static String str = "000000";
   
    public void init()
   
    {
   
    try{
   
    CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM3");
   
    // 直接取得COM3端口
   
    System.out.println(portId.getName()+":开启");
   
    @SuppressWarnings("unused")
   
    Read reader = new Read(portId);
   
    }catch(Exception ex){
   
    ex.printStackTrace();
   
    }
   
    }
   
    class Read implements Runnable, SerialPortEventListener {
   
    InputStream inputStream;
   
    SerialPort serialPort;
   
    Thread readThread;
   
    public Read(CommPortIdentifier portId) throws InterruptedException {
   
    try {
   
    serialPort = (SerialPort) portId.open("MyReader", 2000);
   
    //portId.open("串口所有者名称", 超时等待时间);
   
    } catch (PortInUseException e) {
   
    //如果端口被占用就抛出这个异常
   
    e.printStackTrace();
   
    }
   
    try {
   
    inputStream = serialPort.getInputStream();
   
    //从COM3获取数据
   
    } 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(30000);
   
    serialPort.close();
   
    System.out.println("COM3:关闭");
   
    //设定30秒后端口关闭,程序随之结束
   
    } catch (InterruptedException e) {}
   
    }
   
    /**
   
    *  BI -通讯中断。
   
    CD -载波检测。
   
    CTS -清除发送。
   
    DATA_AVAILABLE -有数据到达。
   
    DSR -数据设备准备好。
   
    FE -帧错误。
   
    OE -溢位错误。
   
    OUTPUT_BUFFER_EMPTY -输出缓冲区已清空。
   
    PE -奇偶校验错。
   
    RI - 振铃指示。
   
    一般最常用的就是DATA_AVAILABLE--串口有数据到达事件。
   
    */
   
    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.println("numBytes"+numBytes);
   
    }
   
    str = new String(readBuffer)。trim();
   
    System.out.println(new String(readBuffer)。trim());
   

    //输出读入的字符
   
    } catch (IOException e) {}
   
    break;
   
    }
   
    }
   
    }
   
    public static void main(String [] args)
   
    {
   
    Readstr reader = new Readstr();
   
    reader.init();
   
    }
   
    }
   
    //此程序只用于监听COM3端口,当程序执行时开启COM3端口,等待30秒后,端口COM3关闭,程序随之关闭
   
    //Read 为内部类,这样可以共用读取出来的字符串信息
   
    //在Readstr 中定义一个静态变量static String str = "000000";
   
    //然后在读出数据后str = new String(readBuffer)。trim();
   
    //这样可以在一个事件触发后,将str中的值赋给相应的值(比如说,让这个值显示在输入框中)
   
    6.执行程序
   
    执行上边的程序,打开超级超级串口调试器,选择除COM3以外的端口,波特率改为9600,因为上面的程序选择的是COM3端口,波特率为9600,也可以将上边程序端口改的别的,反正就是:这个串口调试程序占用一个端口,上边的执行程序再占用一个端口,两个端口不能为同一个,不然会出异常。
   
    如图所示:点击手动发送,后台是不是输出数据了?呵呵
   
    好了做到这里,我们可以在程序中读取出服务端的串口信息了。
   
    但由于项目是B/S的,最终目的是读取出来每个登录客户端的串口信息

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值