Java问题,比较头疼
我之前学做做过一些独立运行的小程序,但是最近有个project, 需要编写一个射频卡(RFID)管理的程序,而射频卡读取器硬件是通过USB与电脑连接, 如何通过Java才能对硬件进行调动呢, 总觉得抓不着头绪, 无从下手,希望哪位高人给指条路:) :) :) Java调动硬件是个软项,为什么不用C来做?
回复 #2 天上的一片云 的帖子
教授要求要用java, 另外C我只会点皮毛$汗$ 有意思,没有做过,应该有相应包吧,关注:) 只能用JNI调用,WINDOWS下通过JNI访问用C这类语言编写好的dll就能调用本地硬件了理论上HO
[ 本帖最后由 klsharp 于 2007-12-9 01:54 编辑 ] 说道jni让我很头大。只记得对c compiler的依赖很高。代码又及其丑陋。以前有个项目用vc compile的程序调java ok.反过来死活不出来。
后来一直从事纯java框架。还好还好。 原帖由 klsharp 于 2007-12-9 01:53 发表 http://www.dolc.de/forum/images/common/back.gif
只能用JNI调用,WINDOWS下通过JNI访问用C这类语言编写好的dll就能调用本地硬件了
理论上HO
我在网上也查了下, 看来也只能用jni了$汗$
$握手$ $握手$ $送花$ JNI是一个可能性.
但是也可以用java串口通信。试过感觉功能不是很好。
RFID Reader 可以用HyperTerminal来测试,或者控制。
Reader 所作的就是首先初始化端口,然后监听端口,有数据来的时候分析数据。
这是我以前做的,希望能有所帮助
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
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;
import RFIDReader.BookshelfSpace;
public class Reader implements SerialPortEventListener {
private Enumeration portList;
private CommPortIdentifier portId;
private SerialPort serialPort;
private InputStream inputStream;
private String portName;
private BookshelfSpace space;
private static int WAIT_TIME = 2000;
public static void main(String[] args) {
// if(args.length!=2)
// {
// System.out.println("Error:invalidated arguments:");
// System.out.println("Usage: Reader portName url");
// System.exit(1);
// }
// String portName=args;
// String url=args;
new Reader("COM4");
// "/dev/term/a" //linuxs
}
Reader(String portName) {
this.portName = portName;
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (portId.getName().equals(portName)) {
read();
}
}
}
}
public void read() {
try {
serialPort = (SerialPort) portId.open("RfidReader", WAIT_TIME);
} catch (PortInUseException e) {
}
try {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {
}
serialPort.notifyOnDataAvailable(true);
try {
inputStream = serialPort.getInputStream();
byte[] readBuffe = new byte;
if (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffe);
System.out.print("Reader Version:"+new String(readBuffe));
}
} catch (IOException e) {
}
try {
serialPort.addEventListener(this);
System.out.println(" Reader initialized.");
} catch (TooManyListenersException e) {
}
}
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:
byte[] readBuffer = new byte;
try {
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
}
System.out.print(new String(readBuffer));
} catch (IOException e) {
}
break;
}
}
}
都说了用usb接口了,还有啥好说的。
其实不管是什么接口传到pc的数据,基本都是现在pc 内存里建立虚拟文件,读取数据的方法和读取文件基本类似,只是不同端口的虚拟文件名不一样而已,在java立,一般常用的端口都是相应的封装好的类,肯定不必自己开发。 楼上是个明白人!
页:
[1]