不使用comm.jar的java串口通讯工具类,使用自己编写的dll类

不再需要 javacomm!

众所周知,windows下使用java进行串口通讯需要用到sun提供的串口包 javacomm20-win32.zipcomm.jar,我找了一下,这玩意有点太坑了,部署麻烦无比,而且还非常老,使用比较麻烦,甚至没有64位版本


由于本人需要一些特殊的应用,所以需要用到串口通讯。


于是自己编写了一个dll库类,使用jna加载,自动识别32位和64位版本。封装得非常简单,代码量也非常少,使用非常容易。


首先确保你有jna-4.2.1.jar这个类

下面贴出主要的类实现,其本质还是加载dll,已经在win7和win10下测试通过,用于本司的一个系统中

package com.siecom.test;

import java.io.File;
import java.io.IOException;

import com.sun.jna.Library;
import com.sun.jna.Native;

public class SerialPortWinChannel {
	int portNo = 1;
	int baud = 115200;
	char parity = 'N';
	int databits = 8;
	int stopsbits = 1;
	short dwCommEvents = 1;
	byte[] buf = new byte[4096];
	static String env = "x64";
	static {
		String arch = System.getProperty("sun.arch.data.model");
		System.out.println(arch);

		if (arch.equals("64")) {

			env = "x64";
		} else {

			env = "x86";
		}

	}

	public interface SerialPortForWin extends Library {

		/**
		 * 
		 * 当前路径是在项目下,而不是bin输出目录下。
		 */
		public SerialPortForWin INSTANCE = (SerialPortForWin) Native
				.loadLibrary(env + File.separator + "serial_port_dll",
						SerialPortForWin.class);

		boolean InitPort(int portNo, int baud, char parity, int databits,
				int stopsbits, short dwCommEvents);

		void ClosePort();

		boolean WriteData(byte[] pData, int length);

		int ReadChar(byte[] cRecved, int want_read);

		int GetBytesInCOM();

		int fnSerialPortDLL();

	}

	public void setConfig(int portNo, int baud, char parity, int databits,
			int stopsbits, short dwCommEvents) {

		this.portNo = portNo;
		this.baud = baud;
		this.parity = parity;
		this.databits = databits;
		this.stopsbits = stopsbits;
		this.dwCommEvents = dwCommEvents;

	}

	public int initChannel() {
		// TODO Auto-generated method stub
		if (SerialPortForWin.INSTANCE.InitPort(portNo, baud, parity, databits,
				stopsbits, dwCommEvents)) {

			return 0;
		} else {

			return -1;
		}
	}

	public int write(byte[] command, int length) {
		// TODO Auto-generated method stub
		
		if(SerialPortForWin.INSTANCE.WriteData(command, length)){
			
			return 0;
		}
		return -1;
	}

	public int available() throws IOException {
		// TODO Auto-generated method stub
		return SerialPortForWin.INSTANCE.GetBytesInCOM();
	}

	public int read(byte[] buffer, int offset, int length) {
		// TODO Auto-generated method stub
		  int revCount =SerialPortForWin.INSTANCE.ReadChar(buf,length);
	       System.arraycopy(buf,0,buffer,offset,length);
	       return revCount;
	}

	public int reset() {
		// TODO Auto-generated method stub
		SerialPortForWin.INSTANCE.ClosePort();
		initChannel();
		return 0;
	}

	public void destroy() {
		// TODO Auto-generated method stub
		SerialPortForWin.INSTANCE.ClosePort();
	}

}
提供工程下载:

http://download.csdn.net/detail/godghkj/9477301



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值