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

转载 2013年05月09日 23:14:50

串口连接好了,剩下的就是写程序了
   
    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的,最终目的是读取出来每个登录客户端的串口信息

相关文章推荐

JAVA通过COM接口操作PPT

一、 背景及要求在Eclipse环境下,开发JAVA代码操作PPT,支持对PPT模板的修改。包括修改文本标签、图表、表格。满足大多数软件生成PPT报告的要求,即先收工创建好模板,在程序中修改模板数据。...

java调用WPS或pdfcreator的com接口实现doc转pdf

package test; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com....

Java之Jacob调用COM接口DLL-----------------------------------dm。dll

累成汪了。。。。终于可以用Java控制windows了,嗯,低层次按键模拟,可控制游戏,内存也不在话下。 请尊重他人劳动成果,转载请注明出处 一、环境介绍 1、myeclipse8.5 2、著名按键...
  • CB44606
  • CB44606
  • 2015年11月26日 21:40
  • 3631

java调用WPS或pdfcreator的com接口实现doc转pdf

使用了jacob.jar来调用activex控件,本机需安装WPS或pdfcreator。 还需要jacob.jar以及jacob.dll 请看附件 jacob.dll 需要放置在系统system...

VC利用COM接口操作Word总结

 VC利用COM接口操作Word总结   1、初始化COM库 2、利用COM接口提供的函数,打开默认的模版文档。对Word进行读...

C++通过COM接口操作PPT

一、 背景及要求在VS环境下,开发C++代码操作PPT,支持对PPT模板的修改。包括修改文本标签、图表、表格。满足大多数软件生成PPT报告的要求,即先收工创建好模板,在程序中修改模板数据。二、 开发环...

JavaScript调用COM接口说明

我们在开发COM组件给js调用时,需要提供给js的是COM接口的CLASSID,而不是组件的classid。如下为COM组件的一个idl文件:// FuckATL.idl : FuckATL 的 ID...

HTML 调用Delphi编写的Com接口

  • 2012年05月15日 08:48
  • 388KB
  • 下载

VC调用COM接口

  • 2012年09月10日 10:34
  • 88KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java调用 COM接口基本配置操作
举报原因:
原因补充:

(最多只允许输入30个字)