`
dengzhangtao
  • 浏览: 676384 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

linux 下java的串口,并口开发(RXTXcomm.jar)

 
阅读更多

 

环境:

笔记本-虚拟机-红旗系统-实达金融手柄(串口)和打印机(并口)

 

场景:

写一个java的demo界面程序,演示操作金融手柄,返回数据后用打印机打印,演示结束。

 

思路:

java没有直接提供串口和并口开发的包,可以用sum提供的RXTXcomm.jar包

 

开发步骤:

.安装 rxtx-2.1-7

---------------------------------

(1) Download rxtx:

建议下载 rxtx-2.1-7-bins-r2.zip

网址:http://rxtx.qbang.org/wiki/index.php/Download

 

(2) 解压 rxtx: 

jar -xf rxtx-2.1-7-bins-r2.zip

 

(3) 安装 rxtx(注意可能需要root权限):

    (A) 拷贝文件

    

32位系统:

拷贝 x86.32/RXTXcomm.jar 至 /opt/java/jre/lib/ext

拷贝 x86.32/librxtxParallel.so、x86.32/librxtxSerial.so 至 /usr/lib

 

64位系统:

拷贝 x86.64/RXTXcomm.jar 至 /opt/java/jre/lib/ext

 

拷贝 x86.64/librxtxParallel.so、x86.64/librxtxSerial.so 至 /usr/lib

 

2,红旗系统的并口驱动没有默认加载.

   解决办法:

   打开终端, 执行以下命令:

   sudo modprobe lp

另外,红旗linux下,进行以下操作时可能需要root权限,必要时用sudo passwd root命令设置root用户密码,再用su命令切到root用户

 

3,开发demo程序

 

4,用eclipse打包成demo.jar包,怎么打包jar含第三方的,可以参考上一篇

 

5,终端: java -jar demo.jar

 

demo程序:

import gnu.io.CommPortIdentifier;

import gnu.io.NoSuchPortException;

import gnu.io.PortInUseException;

import gnu.io.SerialPort;

import gnu.io.SerialPortEvent;

import gnu.io.SerialPortEventListener;

 

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Enumeration;

import java.util.TooManyListenersException;

 

/**

 * 实达POS机 串口

 * 

 * @author root

 * 

 */

public class PosPort implements SerialPortEventListener {

 

protected static CommPortIdentifier portid = null;

protected static SerialPort comPort = null;

protected int port = 1;

protected int baud = 9600;

protected int dataBits = 8;

protected int stopBits = 1;

protected int parity = 0;

private String getSerialData;

 

private static OutputStream oStream;

private static InputStream iStream;

private static boolean isInitsucsess;

 

static byte[] checkCmd = new byte[] { 0x30, 0x30, 0x30, 0x34, 0x30, 0x30,

0x30, 0x31 }; // 查询余额

static byte[] comsumeCmd = new byte[] { 0x30, 0x30, 0x31, 0x36, 0x30, 0x30,

0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30,

0x30, 0x30, 0x30 };// 消费

static final int type_cmd_check = 0x1;

static final int type_cmd_comsume = 0x2;

int current_type_cmd = 0;

 

private static PosPort mInstance;

public static PosPort getInstance(){

if(mInstance==null){

mInstance = new PosPort();

}

return mInstance;

}

 

private PosPort() {

// 查看所有串口

// this.listPortChoices();

this.setSerialPortNumber(1);

this.setSerialPortParams();

}

 

/**

* 查询余额

*/

public void onCheck() {

try {

current_type_cmd = type_cmd_check;

 

oStream.write(checkCmd);

oStream.flush();

oStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

/**

* 消费

*/

public void onComsume() {

try {

current_type_cmd = type_cmd_comsume;

 

oStream.write(comsumeCmd);

oStream.flush();

oStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

private int setSerialPortNumber(int Port) {

 

String defaultPort = null;

 

String osname = System.getProperty("os.name", "").toLowerCase();

 

if (osname.startsWith("windows")) {

// windows

defaultPort = "COM2";

} else if (osname.startsWith("linux")) {

// linux

defaultPort = "/dev/ttyS1";

} else if (osname.startsWith("mac")) {

// mac

defaultPort = "????";

} else {

System.out.println("Sorry, your OS isn't supported.");

}

 

System.out.println("Default port is: " + defaultPort);

 

try {

portid = CommPortIdentifier.getPortIdentifier(defaultPort);

// portid = CommPortIdentifier.getPortIdentifier(Port);

comPort = (SerialPort) portid.open("Controller", 1000);

} catch (NoSuchPortException e) {

System.out.println(e.getMessage());

e.printStackTrace();

return 1;

} catch (PortInUseException e) {

e.printStackTrace();

return 1;

}

 

try {

comPort.addEventListener(this);// 增加一个监听

comPort.notifyOnDataAvailable(true);

 

} catch (TooManyListenersException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

 

try {

oStream = comPort.getOutputStream();

iStream = comPort.getInputStream();

comPort.notifyOnDataAvailable(true);

} catch (Exception e) {

if (comPort != null)

comPort.close();

isInitsucsess = false;

return 1;

}

this.port = Port;

isInitsucsess = true;

return 0;

}

 

private int setSerialPortParams() {

try {

comPort.setSerialPortParams(this.baud, this.dataBits,

this.stopBits, this.parity);

} catch (Exception e) {

System.out.print("串口不支持的操作");

}

return 0;

}

 

/**

* 读取所有串口名字

*/

private 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());

}

}

}

 

public static void main(String[] args) {

 

PosPort s = new PosPort();

//s.onCheck();

s.onComsume();

}

 

@Override

public void serialEvent(SerialPortEvent event) {

// TODO Auto-generated method stub

 

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[1000];

 

try {

while (iStream.available() > 0) {

int numBytes = iStream.read(readBuffer);

}

System.out.println(new String(readBuffer));

 

//发送打印

this.sendPrint(new String(readBuffer));

} catch (IOException e) {

System.out.println(e.toString());

}

 

break;

}

}

 

/**

* 拆字符串,并且发送打印命令

* @param d

*/

private void sendPrint(String d) {

String data = d;

switch (current_type_cmd) {

case type_cmd_check:// 查询余额

 

String[] strs = data.split(" ");

String num = strs[0];

String money = strs[2];

data = "卡号为:" + num.substring(10, num.length()) + "\n可用余额为:"

+ money.substring(7, money.length());

System.out.println(data);

 

break;

case type_cmd_comsume:// 消费

 

 

break;

 

default:

 

break;

}

//PrinterPort.getInstance().print(data);

 

}

 

 

}

 

 

0
0
分享到:
评论

相关推荐

    RXTXcomm.jar rxtxParallel.dll rxtxSerial.dll

    1. **RXTXcomm.jar**:这是RXTX的主要Java类库文件,包含了Java代码,用于提供串行和并行通信的接口。在Java项目中,你需要将这个JAR文件添加到类路径中,以便你的Java程序能够访问和使用RXTX提供的功能。 2. **...

    linux RXTXcomm.jar的串口通信所需dll-rxtxParallel.dll-rxtxSerial.dll

    Linux下的串口通信是开发嵌入式系统、设备控制或者数据传输等项目中常见的需求,RXTX是一个开源的Java库,它提供了与操作系统交互的API,使得Java程序能够访问串行(Serial)和并行(Parallel)端口。在这个话题中,...

    RXTX.zip包含mac下可用的RXTXcomm.jar和librxtxSerial.jnilib

    RXTX是Java串口通信的一个解决方案,它允许开发者在Java程序中直接访问串行和并行端口。这个库在Linux、Windows和Mac OS X等操作系统上都可运行,为开发者提供了统一的API,无需关心底层操作系统差异。RXTX库包含两...

    64位 rxtxParallel.dll、rxtxSerial.dll、RXTXcomm.jar下载

    2. **配置Java环境**:在使用RXTX之前,需要确保Java开发环境已正确配置,包括将`RXTXcomm.jar`添加到类路径,并将`rxtxParallel.dll`和`rxtxSerial.dll`放置在系统PATH环境变量指定的目录下,或者与Java可执行文件...

    RXTXcomm的jar包linux和Windows都有

    总的来说,RXTXcomm是一个强大的跨平台Java串口通信库,它简化了开发过程,使开发者无需关心底层操作系统的细节就能实现串口通信功能。无论是在Linux还是Windows系统上,通过RXTX,开发者都能轻松地搭建起与外部设备...

    java 桌面开发串口的jar包

    RXTXcomm.jar是Java中实现串口通信的关键库,它为开发者提供了简单易用的API,使得在Java环境中进行串行通信变得可能。 RXTX库是一个开源项目,其主要功能是提供Java对串行和并行通信的支持。在Java标准库中,虽然...

    java串口通信编程.zip

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

    RXTXcomm-src.zip_RXTXcomm-src.jar

    通过深入研究“RXTXcomm-src.jar”,开发者不仅可以学习到如何在Java环境中进行串行通信,还可以掌握如何实现Modbus通信,这对从事物联网、自动化或者嵌入式开发的工程师来说非常有价值。同时,对源代码的理解也有助...

    java串口通讯rxtx2.2jar包,含64,32位.zip

    Java串口通讯是Java开发中实现设备间串行通信的一种技术。在Java中,通过RXTX库可以方便地进行串口操作,如发送和接收数据。RXTX是一个开源项目,提供了Java语言访问串口(COM端口)和并口(LPT端口)的能力。在给定...

    java-串口-rxtx-2.2.zip

    Java串口通信库RXTX是一个开源项目,用于在Java应用程序中实现串行(RS-232)和并行通信。这个名为"java-串口-rxtx-2.2.zip"的压缩包包含了RXTX库的核心组件,使得Java开发者能够轻松地与外部设备进行交互,例如通过...

    java串口通信编程用文件

    Java串口通信编程是开发硬件接口应用的重要环节,特别是在物联网(IoT)和嵌入式系统中。在Java中实现串口通信,我们通常会利用第三方库,如RXTXcomm.jar,它是一个开源的Java库,允许Java应用程序访问串行和并行端口...

    java 串口通信 rxtx demo

    RXTX支持多种操作系统,包括Windows、Linux、Mac OS X等,这使得Java串口程序具有跨平台性。 要使用RXTX库,首先需要在项目中引入对应的JAR文件,例如`rxtxSerial.jar`和`rxtxComm.jar`。接着,我们可以创建`...

    rxtxcomm-2.2pre2

    `RXTXcomm.jar` 是包含 RXTX Java 类的类库文件,它提供了 Java 中的接口和类,使得开发者可以在 Java 程序中方便地进行串行通信操作。 RXTX 提供了以下关键功能: 1. **跨平台兼容性**:RXTX 支持多种操作系统,...

    RXTX.jar_library

    RXTX.jar_library 是一个与Java相关的库,主要用于在Java应用程序中实现串行通信功能。RXTX 是一个开源项目,提供了Java语言访问串行端口(COM端口)和并行端口的能力,使开发者能够轻松地进行硬件交互。在64位系统...

    rxtx-2.2-20081207-win-x64.zip

    Dunham开发,它提供了与Java虚拟机(JVM)交互的本地接口,使得Java程序可以方便地访问操作系统底层的串行和并行端口。RXTX库支持多种操作系统,包括Windows、Linux、Mac OS X等,为跨平台的串口通信提供了可能。在...

    Java串口通信编程

    RXTX 主要是在 COMM 开源包中做扩张,以前的 COMM 包只能在 WINDOWS 下面对串口或并口做操作,扩充后的 RXTX 可以在 LINUX 和 MAC 下对串口和并口做操作。因此,RXTX 成为了 Java 串口通信编程的不二之选。 在 Java...

    java串口通讯协议Rs232相关文件.rar

    1. **RXTXcomm.jar**:这是RXTX库的主要部分,它是一个开源的Java库,提供了与串行和并行端口进行通信的能力。RXTX库兼容Java 2平台标准版(J2SE),并且支持多种操作系统,包括Windows、Linux、Mac OS X等。在64位...

    rxtx串口通讯总结

    它通过串行接口(如RS-232、USB等)进行一对一的数据交换,适用于短距离、低速率的通信场景。在嵌入式系统、物联网设备、自动化设备等领域,串口通讯有着广泛的应用。 **RXTX库介绍** RXTX是一个开源的Java库,...

    串口通讯.rar

    RXTXcomm.jar是RXTX库的主要组件,它是Java应用程序与串口和并口交互的接口。这个库使得开发者能够在Java程序中轻松地打开、配置和读写串行端口,无需了解底层操作系统或驱动程序的细节。在Java程序中,可以使用...

Global site tag (gtag.js) - Google Analytics