`

java串口通信实例

阅读更多
package com.yuan;

import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.TooManyListenersException;

public class SerialComm implements SerialPortEventListener, Runnable {
	public final static String PORT_OWER = "MonitorApp";
	private boolean isOpen;
	private boolean isStart;
	private boolean isSave;
	private boolean isPrint;
	private Thread readThread;
	private String portName;
	private String portAddress;
	private CommPortIdentifier portId;
	private SerialPort serialPort;
	private DataInputStream inputStream;
	private OutputStream outputStream;
	private SimpleDateFormat formatter;
	private String dataProtocol;
	private Object readEWriteLock = new Object();
	public SerialComm(){
		this.isOpen = false;
		this.isStart = false;
		this.isSave = true;
		this.isPrint = false;
		formatter = new SimpleDateFormat("[yyyy-MM-dd hh:mm:ss,SSS]");
		portName = "COM1";
		portAddress = "LOCAL";
		dataProtocol = "Gooseli";
	}
	public void init(String port,String protocol ) throws Exception{
		this.portName = port;
		this.portAddress = portName;
		this.dataProtocol = protocol;
		init();
	}
	public void init(String port,String address,String protocol) throws Exception{
		this.portName = port;
		this.portAddress =  address;
		this.dataProtocol = protocol;
	}
	public void init()throws IOException,Exception{
		if(isOpen){
			close();
		}
		try{
			portId = CommPortIdentifier.getPortIdentifier(portName);
			serialPort = (SerialPort)portId.open(PORT_OWER,2000);
			inputStream = new DataInputStream(serialPort.getInputStream());
			outputStream = serialPort.getOutputStream();
			isOpen = true;
		}catch(NoSuchPortException ex){
			throw new Exception(ex.toString());
		}
	}
	public void start()throws Exception{
		if(!isOpen){
			throw new Exception(portName + " has not bean opened!");
		}
		try{
			readThread = new Thread(this);
			readThread.start();
			serialPort.notifyOnDataAvailable(true);
			serialPort.addEventListener(this);
			isStart =  true;
		} catch( TooManyListenersException ex){
			throw new Exception(ex.toString());
		}
	}
	private void close() {
		stop();
		if(isOpen){
			try{
				inputStream.close();
				outputStream.close();
				serialPort.close();
				isOpen = false;
			}catch(IOException ex){
			}
		}
	}
	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:// 当有可用数据时读取数据,并且给串口返回数据
			readComm();
			/*byte[] readBuffer = new byte[20];
			try {
				while (inputStream.available() > 0) {
					System.out.println(inputStream.available());
					int numBytes = inputStream.read(readBuffer);
					System.out.println(numBytes);
				}
				data = new String(readBuffer).trim();
				System.out.println(new String(readBuffer).trim());
			} catch (IOException e) {
				e.fillInStackTrace();
			}*/
			break;
		default:break;
		}
		
	}

	private void readComm() {
		byte[] readBuffer = new byte[20];
		try {
			while (inputStream.available() > 0) {
				System.out.println(inputStream.available());
				int numBytes = inputStream.read(readBuffer);
			}
			//data = new String(readBuffer).trim();
			System.out.println(new String(readBuffer).trim());
		} catch (IOException e) {
			e.fillInStackTrace();
		}
		/*StringBuffer readBuffer = new StringBuffer();
		String scannedInput = "";
		Date currentTime = null;
		String TimeStamp = "";
		int c ;
		char a;
		try {
			InputStreamReader fis = new InputStreamReader(inputStream,"utf-8");
			while((c=fis.read())!=-1){
				readBuffer.append((char)c);
			}
			scannedInput = readBuffer.toString().trim();
			currentTime = new Date();
			TimeStamp  = formatter.format(currentTime);
		} catch(IOException ex	){
			ex.printStackTrace();
		} catch(Exception exx){
			exx.printStackTrace();
		}*/
	}
	public void run() {
		/*while(true){
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			String at = "test";
			writeComm(at);
			isPrint = true;
		}*/
		/*String at = "at^hcmgr=1\r";
		String strTemp = at+(char)Integer.parseInt("la",16) + "z";
		writeComm(strTemp);*/
	}
	private void writeComm(String outString) {
		synchronized(readEWriteLock){
			try{
				outputStream.write(outString.getBytes());
			} catch(IOException ex){
				ex.printStackTrace();
			}
		}
	}
	public void stop(){
		if(isStart){
			serialPort.notifyOnDataAvailable(false);
			serialPort.removeEventListener();
			isStart =false;
		}
	}
	public static void main(String[] args){
		SerialComm serialComm = new SerialComm();
		try {
			serialComm.init("COM2","Air");
			serialComm.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 附件libs.rar为响应jar和需要放在jre里面的dll文件

分享到:
评论
2 楼 smallbee 2012-08-03  
liuwei88212 写道
.dll文件放在哪呢?我放在了jdk/bin下面了,可是报异常了~~~
java.lang.Exception: javax.comm.NoSuchPortException
at 串口通讯.SerialComm.init(SerialComm.java:63)
at 串口通讯.SerialComm.init(SerialComm.java:45)
at 串口通讯.SerialComm.main(SerialComm.java:190)


java.lang.Exception: javax.comm.NoSuchPortException

应该不是dll问题吧,看异常,像是端口问题
1 楼 liuwei88212 2012-08-02  
.dll文件放在哪呢?我放在了jdk/bin下面了,可是报异常了~~~
java.lang.Exception: javax.comm.NoSuchPortException
at 串口通讯.SerialComm.init(SerialComm.java:63)
at 串口通讯.SerialComm.init(SerialComm.java:45)
at 串口通讯.SerialComm.main(SerialComm.java:190)

相关推荐

    Java串口通信实例

    总的来说,Java串口通信实例`comtest`揭示了如何在Java环境中实现与硬件设备的串行通信。通过理解这些基本步骤和关键类,你可以根据自己的需求扩展功能,比如添加多线程、错误恢复机制,或者构建更复杂的通信协议。

    Java串口通信实例带数据库传输

    在这个"Java串口通信实例带数据库传输"项目中,我们将深入探讨如何使用Java进行串口操作,并结合数据库存储传输的数据。 首先,Java提供了一个名为`javax.comm`的库来处理串口通信,但这个库已经过时,且对现代Java...

    java串口通信实例,经过测试使用Java实用源码整理learns

    通过学习这个Java串口通信实例,你不仅可以掌握串口通信的基本概念,还能了解到如何在Java中实现串口通信,这对于开发涉及硬件交互的应用非常有价值。记得在实际操作时,要根据自己的硬件环境和需求调整参数,确保...

    JAVA串口通信实例(GUI图像化界面)

    Java串口通信是一种在计算机之间通过串行接口进行数据传输的技术。...这个实例对于学习Java串口通信和GUI编程是非常有价值的,它将理论与实践相结合,帮助开发者掌握如何在Java环境中创建一个功能完整的串口通信应用。

    串口实例串口实例串口实例串口实例串口实例串口实例

    本实例将深入探讨Java编程中如何实现串口通信,以满足不同设备间的交互需求。 串口通信,又称串行通信,是通过串行数据传输的方式进行设备间的数据交换。它将数据一位一位地顺序传输,与并行通信相比,虽然速度较慢...

    java串口通信

    java串口通信实例,仅供大家学习参考。Java串口,本实例大致工作流程是:将以下的所有java类都放在一个包下面,run as ---java application ,打开的是一个图形化界面,最上面的是一个输入文本框(也就是你要发射的...

    java串口通信简单的例子

    而`Java串口通信实例%282011.5.31%29.rar`文件可能包含更多实际的代码示例和项目,供你参考和学习。 总的来说,Java串口通信是一个实用的技术,特别适合于需要与硬件设备交互的项目。通过理解和应用这些基本概念,...

    Java实现串口通信

    Java实现串口通信是计算机编程中的一个重要领域,特别是在嵌入式系统、自动化设备以及物联网(IoT)设备的控制和数据传输中。Java虽然不是直接支持串口操作的语言,但通过一些库和API,我们可以创建应用程序来实现串口...

    安卓串口通信实例附源码(合集)

    **安卓串口通信实例概述** 安卓串口通信是Android设备与外部硬件设备之间进行数据交换的一种常见技术。在物联网、嵌入式系统以及自动化设备控制等领域有着广泛的应用。本资源包含了一个代码合集,提供了五个不同的...

    java串口通信编程.zip

    Java串口通信编程是Java应用程序与外部设备之间通过串行接口进行数据交换的一种技术。在Java中实现串口通信,通常需要借助第三方库,RXTXcomm.jar就是这样一个常用的库,它提供了Java语言访问串口的功能。这个压缩包...

    Android串口通信实例

    这个“Android串口通信实例”项目是基于Android Studio的一个实战项目,已经过测试,能够有效地执行串口的各种操作,如配置、开启、发送和接收数据。下面将详细讲解Android串口通信的相关知识点。 1. **Android串口...

    java 串口通信 完整demo

    Java串口通信是一种在计算机之间或计算机与外部设备(如传感器、打印机等)之间通过串行接口进行数据传输的技术。这个“java 串口通信 完整demo”提供了一个完整的示例,包括所有必要的依赖包,可以直接运行,并且带...

    java串口通信例程

    Java串口通信是一种在计算机与外部设备之间进行数据交换的技术,它通过标准的串行物理接口(例如RS-232)实现。在Java中,虽然标准库并未直接支持串口通信,但可以通过第三方库来实现,如RXTX和Java Comm API。本...

    java 串口通信详细及简单实例

    ### Java串口通信实例分析 #### 1. 实例目的 文章中的简单实例旨在演示如何使用Java通过串口与外部硬件设备进行通信。通过实例,开发者可以了解如何检测可用的串口,以及如何打开、发送和关闭串口。 #### 2. 实例...

    java串口通信详解

    ### Java串口通信详解 #### 1. 串口通信简介 串口通信是一种非常重要的通信方式,尤其是在嵌入式系统或传感器网络的应用场景中。它允许PC机与嵌入式设备或传感器节点进行有效通信。最常见的接口有两种:RS-232串口...

    [IT_计算机]Java串口通信详解

    ### IT_计算机]Java串口通信详解 #### 序言 在开源的世界里,人们能够获得各种资源,从代码到类库,再到完整的项目。开源不仅促进了技术的发展,还为不同背景的学习者提供了宝贵的资源。然而,开源项目的文档和...

    java串口编程小实例

    本实例旨在通过简洁易懂的代码示例,帮助开发者理解如何在Java中实现串口通信。 首先,我们需要引入一个支持Java串口操作的库,如RXTX库。RXTX是一个开源的Java库,它提供了与操作系统底层串口通信的功能。在项目中...

    Java串口通信详解

    Java串口通信详解 在Java编程中,串口通信是一种重要的技术,特别是在嵌入式系统、传感器网络和设备之间的交互中。本文将详细介绍如何在Java中实现串口通信,主要涉及SUN的CommAPI,这是一个在Windows和Linux/...

    java串口通信及例子程序

    ### Java串口通信详解 #### 一、Java串口通信概述 Java串口通信是指Java程序通过计算机的串行通信接口(通常称为“串口”)与其他设备进行数据交换的过程。这种通信方式广泛应用于工业自动化、物联网等领域。为了...

Global site tag (gtag.js) - Google Analytics