环境:
笔记本-虚拟机-红旗系统-实达金融手柄(串口)和打印机(并口)
场景:
写一个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);
}
}
l
相关推荐
1. **RXTXcomm.jar**:这是RXTX的主要Java类库文件,包含了Java代码,用于提供串行和并行通信的接口。在Java项目中,你需要将这个JAR文件添加到类路径中,以便你的Java程序能够访问和使用RXTX提供的功能。 2. **...
Linux下的串口通信是开发嵌入式系统、设备控制或者数据传输等项目中常见的需求,RXTX是一个开源的Java库,它提供了与操作系统交互的API,使得Java程序能够访问串行(Serial)和并行(Parallel)端口。在这个话题中,...
RXTX是Java串口通信的一个解决方案,它允许开发者在Java程序中直接访问串行和并行端口。这个库在Linux、Windows和Mac OS X等操作系统上都可运行,为开发者提供了统一的API,无需关心底层操作系统差异。RXTX库包含两...
2. **配置Java环境**:在使用RXTX之前,需要确保Java开发环境已正确配置,包括将`RXTXcomm.jar`添加到类路径,并将`rxtxParallel.dll`和`rxtxSerial.dll`放置在系统PATH环境变量指定的目录下,或者与Java可执行文件...
总的来说,RXTXcomm是一个强大的跨平台Java串口通信库,它简化了开发过程,使开发者无需关心底层操作系统的细节就能实现串口通信功能。无论是在Linux还是Windows系统上,通过RXTX,开发者都能轻松地搭建起与外部设备...
RXTXcomm.jar是Java中实现串口通信的关键库,它为开发者提供了简单易用的API,使得在Java环境中进行串行通信变得可能。 RXTX库是一个开源项目,其主要功能是提供Java对串行和并行通信的支持。在Java标准库中,虽然...
Java串口通信编程是Java应用程序与外部设备之间通过串行接口进行数据交换的一种技术。在Java中实现串口通信,通常需要借助第三方库,RXTXcomm.jar就是这样一个常用的库,它提供了Java语言访问串口的功能。这个压缩包...
通过深入研究“RXTXcomm-src.jar”,开发者不仅可以学习到如何在Java环境中进行串行通信,还可以掌握如何实现Modbus通信,这对从事物联网、自动化或者嵌入式开发的工程师来说非常有价值。同时,对源代码的理解也有助...
Java串口通讯是Java开发中实现设备间串行通信的一种技术。在Java中,通过RXTX库可以方便地进行串口操作,如发送和接收数据。RXTX是一个开源项目,提供了Java语言访问串口(COM端口)和并口(LPT端口)的能力。在给定...
Java串口通信库RXTX是一个开源项目,用于在Java应用程序中实现串行(RS-232)和并行通信。这个名为"java-串口-rxtx-2.2.zip"的压缩包包含了RXTX库的核心组件,使得Java开发者能够轻松地与外部设备进行交互,例如通过...
Java串口通信编程是开发硬件接口应用的重要环节,特别是在物联网(IoT)和嵌入式系统中。在Java中实现串口通信,我们通常会利用第三方库,如RXTXcomm.jar,它是一个开源的Java库,允许Java应用程序访问串行和并行端口...
RXTX支持多种操作系统,包括Windows、Linux、Mac OS X等,这使得Java串口程序具有跨平台性。 要使用RXTX库,首先需要在项目中引入对应的JAR文件,例如`rxtxSerial.jar`和`rxtxComm.jar`。接着,我们可以创建`...
`RXTXcomm.jar` 是包含 RXTX Java 类的类库文件,它提供了 Java 中的接口和类,使得开发者可以在 Java 程序中方便地进行串行通信操作。 RXTX 提供了以下关键功能: 1. **跨平台兼容性**:RXTX 支持多种操作系统,...
RXTX.jar_library 是一个与Java相关的库,主要用于在Java应用程序中实现串行通信功能。RXTX 是一个开源项目,提供了Java语言访问串行端口(COM端口)和并行端口的能力,使开发者能够轻松地进行硬件交互。在64位系统...
Dunham开发,它提供了与Java虚拟机(JVM)交互的本地接口,使得Java程序可以方便地访问操作系统底层的串行和并行端口。RXTX库支持多种操作系统,包括Windows、Linux、Mac OS X等,为跨平台的串口通信提供了可能。在...
RXTX 主要是在 COMM 开源包中做扩张,以前的 COMM 包只能在 WINDOWS 下面对串口或并口做操作,扩充后的 RXTX 可以在 LINUX 和 MAC 下对串口和并口做操作。因此,RXTX 成为了 Java 串口通信编程的不二之选。 在 Java...
1. **RXTXcomm.jar**:这是RXTX库的主要部分,它是一个开源的Java库,提供了与串行和并行端口进行通信的能力。RXTX库兼容Java 2平台标准版(J2SE),并且支持多种操作系统,包括Windows、Linux、Mac OS X等。在64位...
它通过串行接口(如RS-232、USB等)进行一对一的数据交换,适用于短距离、低速率的通信场景。在嵌入式系统、物联网设备、自动化设备等领域,串口通讯有着广泛的应用。 **RXTX库介绍** RXTX是一个开源的Java库,...
RXTXcomm.jar是RXTX库的主要组件,它是Java应用程序与串口和并口交互的接口。这个库使得开发者能够在Java程序中轻松地打开、配置和读写串行端口,无需了解底层操作系统或驱动程序的细节。在Java程序中,可以使用...