Serial port 未知Windows应用程序当前拥有的端口-条形码读取问题
我已经使用设备Argox条形码阅读器(java中型号As-8250)编写了条形码阅读器程序。 我使用javax.com jar进行串行通信。 这是我写的从端口号COM13读取的程序 我还将Argox实用程序的默认端口号设置为COM13Serial port 未知Windows应用程序当前拥有的端口-条形码读取问题,serial-port,barcode,barcode-scanner,Serial Port,Barcode,Barcode Scanner,我已经使用设备Argox条形码阅读器(java中型号As-8250)编写了条形码阅读器程序。 我使用javax.com jar进行串行通信。 这是我写的从端口号COM13读取的程序 我还将Argox实用程序的默认端口号设置为COM13 package scanhandler; import java.awt.AWTException; import java.awt.Robot; import java.io.IOException; import java.io.InputStream;
package scanhandler;
import java.awt.AWTException;
import java.awt.Robot;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Enumeration;
import java.util.Properties;
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 ScanHandler implements Runnable, SerialPortEventListener {
private static CommPortIdentifier myCommPortIdentifier;
private static Enumeration portList;
private static String TimeStamp;
private static String driverClass;
private static String connectionString;
private static String comPort;
private Connection myConnection;
private InputStream myInputStream;
private Robot myRobot;
private SerialPort mySerialPort;
private Thread myThread;
public ScanHandler() {
// open serial port
try {
TimeStamp = new java.util.Date().toString();
mySerialPort = (SerialPort) myCommPortIdentifier.open("ComControl", 2000);
//System.out.println(TimeStamp + ": " + myCommPortIdentifier.getName() + " opened for scanner input");
} catch (PortInUseException e) {
e.printStackTrace();
}
// get serial input stream
try {
myInputStream = mySerialPort.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
// add an event listener on the port
try {
mySerialPort.addEventListener(this);
} catch (TooManyListenersException e) {
e.printStackTrace();
}
mySerialPort.notifyOnDataAvailable(true);
// set up the serial port properties
try {
mySerialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
mySerialPort.setDTR(false);
mySerialPort.setRTS(false);
} catch (UnsupportedCommOperationException e) {
e.printStackTrace();
}
// make a robot to pass keyboard data
try {
myRobot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
// create the thread
myThread = new Thread(this);
myThread.start();
}
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
// on scan
public void serialEvent(SerialPortEvent event) {
if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
StringBuilder myStringBuilder = new StringBuilder();
int c;
try {
// append the scanned data onto a string builder
while ((c = myInputStream.read()) != 10){
if (c != 13) myStringBuilder.append((char) c);
}
// send to keyboard buffer if it the barcode doesn't start with '5'
if (myStringBuilder.charAt(0) != '5') {
for (int i = 0; i < myStringBuilder.length(); i++) {
myRobot.keyPress((int) myStringBuilder.charAt(i));
myRobot.keyRelease((int) myStringBuilder.charAt(i));
}
// here's the scanned barcode as a variable!
} else {
TimeStamp = new java.util.Date().toString();
System.out.println(TimeStamp + ": scanned input received:" + myStringBuilder.toString());
}
// close the input stream
myInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// read ScanHandler properties
Properties myProperties = new Properties();
// myProperties.load(new FileInputStream("config.properties"));
comPort = "COM13";
try {
// get our pre-defined COM port
myCommPortIdentifier = CommPortIdentifier.getPortIdentifier(comPort);
ScanHandler reader = new ScanHandler();
} catch (Exception e) {
TimeStamp = new java.util.Date().toString();
System.out.println(TimeStamp + ": " + comPort + " " + myCommPortIdentifier);
System.out.println(TimeStamp + ": msg1 - " + e);
}
};
}
包扫描处理器;
导入java.awt.AWTException;
导入java.awt.Robot;
导入java.io.IOException;
导入java.io.InputStream;
导入java.sql.Connection;
导入java.util.Enumeration;
导入java.util.Properties;
导入java.util.ToomanyListenerException;
导入javax.comm.CommPortIdentifier;
导入javax.comm.PortInUseException;
导入javax.comm.SerialPort;
导入javax.comm.SerialPortEvent;
导入javax.comm.SerialPortEventListener;
导入javax.comm.unsupportedComOperationException;
公共类ScanHandler实现可运行的SerialPortEventListener{
专用静态通讯器;
私有静态枚举端口列表;
私有静态字符串时间戳;
专用静态字符串驱动器类;
私有静态字符串连接字符串;
私有静态字符串组件;
私有连接;
私有输入流myInputStream;
私人机器人;
专用串行端口mySerialPort;
私有线程读取;
公共扫描处理器(){
//打开串行端口
试一试{
TimeStamp=new java.util.Date().toString();
mySerialPort=(SerialPort)MyComPortIdentifier.open(“ComControl”,2000);
//System.out.println(TimeStamp+“:“+mycmportIdentifier.getName()+”为扫描仪输入打开”);
}捕获(PortinUseeException e){
e、 printStackTrace();
}
//获取串行输入流
试一试{
myInputStream=mySerialPort.getInputStream();
}捕获(IOE异常){
e、 printStackTrace();
}
//在端口上添加事件侦听器
试一试{
mySerialPort.addEventListener(本文件);
}捕获(ToomanyListenerSE异常){
e、 printStackTrace();
}
mySerialPort.notifyOnDataAvailable(true);
//设置串行端口属性
试一试{
mySerialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
串行端口。奇偶校验(无);
mySerialPort.setDTR(false);
mySerialPort.setRTS(false);
}捕获(不支持的操作异常){
e、 printStackTrace();
}
//让机器人传递键盘数据
试一试{
myRobot=新机器人();
}捕获(awtexe){
e、 printStackTrace();
}
//创建线程
myThread=新线程(此线程);
myThread.start();
}
公开募捐{
试一试{
睡眠(100);
}捕获(中断异常e){}
}
//扫描
public void serialEvent(SerialPortEvent事件){
if(event.getEventType()==SerialPortEvent.DATA\u可用){
StringBuilder myStringBuilder=新StringBuilder();
INTC;
试一试{
//将扫描的数据附加到字符串生成器中
而((c=myInputStream.read())!=10){
如果(c!=13)myStringBuilder.append((char)c);
}
//如果条形码不是以“5”开头,则发送到键盘缓冲区
if(myStringBuilder.charAt(0)!=“5”){
对于(int i=0;i
->该程序正在端口COM13上侦听。并打印输入流中的字符串(由条形码阅读器扫描)
->===========================================问题就在这里=======================
当我首先插入Usb并通过设备实用程序强制它使用端口COM13时。它工作得很好。
之后,当我运行Java程序在同一端口上侦听时,它会抛出异常
javax.comm.PortInUseException: Port currently owned by Unknown Windows Application
at javax.comm.CommPortIdentifier.open(CommPortIdentifier.java:337)
at scanhandler.ScanHandler.<init>(ScanHandler.java:41)
at scanhandler.ScanHandler.main(ScanHandler.java:141)
Fri Jun 13 12:20:05 IST 2014: COM13 javax.comm.CommPortIdentifier@d1a2f1
Fri Jun 13 12:20:05 IST 2014: msg1 - java.lang.NullPointerException
javax.comm.PortInUseException:未知Windows应用程序当前拥有的端口
位于javax.comm.CommPortIdentifier.open(CommPortIdentifier.java:337)
scanhandler.scanhandler.(scanhandler.java:41)
位于scanhandler.scanhandler.main(scanhandler.java:141)
2014年6月13日星期五12:20:05 IST:COM13 javax.comm。CommPortIdentifier@d1a2f1
6月13日星期五12:20:05 IST
C:\Users\user>netstat -ano | findstr ":5984"
TCP 127.0.0.1:5984 0.0.0.0:0 LISTENING 2036
TCP 127.0.0.1:5984 127.0.0.1:55706 ESTABLISHED 2036
TCP 127.0.0.1:5984 127.0.0.1:55710 ESTABLISHED 2036
TCP 127.0.0.1:5984 127.0.0.1:55711 ESTABLISHED 2036
TCP 127.0.0.1:5984 127.0.0.1:55712 ESTABLISHED 2036
TCP 127.0.0.1:5984 127.0.0.1:55713 ESTABLISHED 2036
TCP 127.0.0.1:5984 127.0.0.1:55714 ESTABLISHED 2036
TCP 127.0.0.1:55706 127.0.0.1:5984 ESTABLISHED 4716
TCP 127.0.0.1:55710 127.0.0.1:5984 ESTABLISHED 4716
TCP 127.0.0.1:55711 127.0.0.1:5984 ESTABLISHED 4716
TCP 127.0.0.1:55712 127.0.0.1:5984 ESTABLISHED 4716
TCP 127.0.0.1:55713 127.0.0.1:5984 ESTABLISHED 4716
TCP 127.0.0.1:55714 127.0.0.1:5984 ESTABLISHED 4716
C:\Users\user>tasklist | findstr "2036"
erl.exe 2036 Services 0 15,604 K