萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 2147|回复: 9

Java问题,比较头疼

[复制链接]
发表于 2007-12-8 21:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
我之前学做做过一些独立运行的小程序,
但是最近有个project, 需要编写一个射频卡(RFID)管理的程序,而射频卡读取器硬件是通过USB与电脑连接, 如何通过Java才能对硬件进行调动呢, 总觉得抓不着头绪, 无从下手,希望哪位高人给指条路:) :) :)
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-12-8 23:11 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2007-12-8 23:35 | 显示全部楼层

回复 #2 天上的一片云 的帖子

教授要求要用java, 另外C我只会点皮毛$汗$
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-12-8 23:38 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-12-9 02:53 | 显示全部楼层
只能用JNI调用,WINDOWS下通过JNI访问用C这类语言编写好的dll就能调用本地硬件了

理论上HO

[ 本帖最后由 klsharp 于 2007-12-9 01:54 编辑 ]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-12-9 04:34 | 显示全部楼层
说道jni让我很头大。只记得对c compiler的依赖很高。代码又及其丑陋。以前有个项目用vc compile的程序调java ok.反过来死活不出来。

后来一直从事纯java框架。还好还好。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2007-12-9 11:34 | 显示全部楼层
原帖由 klsharp 于 2007-12-9 01:53 发表
只能用JNI调用,WINDOWS下通过JNI访问用C这类语言编写好的dll就能调用本地硬件了

理论上HO


我在网上也查了下, 看来也只能用jni了$汗$
$握手$ $握手$ $送花$
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-12-13 01:39 | 显示全部楼层
JNI是一个可能性.
但是也可以用java串口通信。试过感觉功能不是很好。
RFID Reader 可以用HyperTerminal来测试,或者控制。
Reader 所作的就是首先初始化端口,然后监听端口,有数据来的时候分析数据。
这是我以前做的,希望能有所帮助


  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.util.Enumeration;
  4. import java.util.TooManyListenersException;

  5. import javax.comm.CommPortIdentifier;
  6. import javax.comm.PortInUseException;
  7. import javax.comm.SerialPort;
  8. import javax.comm.SerialPortEvent;
  9. import javax.comm.SerialPortEventListener;
  10. import javax.comm.UnsupportedCommOperationException;

  11. import RFIDReader.BookshelfSpace;

  12. public class Reader implements SerialPortEventListener {
  13.         private Enumeration portList;

  14.         private CommPortIdentifier portId;

  15.         private SerialPort serialPort;

  16.         private InputStream inputStream;

  17.         private String portName;
  18.         private BookshelfSpace space;
  19.         private static int WAIT_TIME = 2000;

  20.         public static void main(String[] args) {
  21. //                if(args.length!=2)
  22. //                {
  23. //                        System.out.println("Error:invalidated arguments:");
  24. //                        System.out.println("Usage: Reader portName url");
  25. //                        System.exit(1);
  26. //                }
  27. //                String portName=args[0];
  28. //                String url=args[1];
  29.                 new Reader("COM4");
  30.                 // "/dev/term/a" //linuxs
  31.         }

  32.         Reader(String portName) {
  33.                 this.portName = portName;
  34.                 portList = CommPortIdentifier.getPortIdentifiers();
  35.                 while (portList.hasMoreElements()) {
  36.                         portId = (CommPortIdentifier) portList.nextElement();
  37.                         if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
  38.                                 if (portId.getName().equals(portName)) {
  39.                                         read();
  40.                                 }
  41.                         }
  42.                 }

  43.         }

  44.         public void read() {
  45.                 try {
  46.                         serialPort = (SerialPort) portId.open("RfidReader", WAIT_TIME);
  47.                 } catch (PortInUseException e) {
  48.                 }
  49.                 try {
  50.                         serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
  51.                                         SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
  52.                 } catch (UnsupportedCommOperationException e) {
  53.                 }
  54.                 serialPort.notifyOnDataAvailable(true);
  55.                 try {
  56.                         inputStream = serialPort.getInputStream();
  57.                        
  58.                         byte[] readBuffe = new byte[inputStream.available()];
  59.                         if (inputStream.available() > 0) {
  60.                                 int numBytes = inputStream.read(readBuffe);
  61.                                 System.out.print("Reader Version:"+new String(readBuffe));
  62.                         }

  63.                 } catch (IOException e) {
  64.                 }
  65.                 try {
  66.                         serialPort.addEventListener(this);
  67.                         System.out.println("[INFO] Reader initialized.");
  68.                 } catch (TooManyListenersException e) {
  69.                 }
  70.         }

  71.         public void serialEvent(SerialPortEvent event) {
  72.                 switch (event.getEventType()) {
  73.                 case SerialPortEvent.BI:
  74.                 case SerialPortEvent.OE:
  75.                 case SerialPortEvent.FE:
  76.                 case SerialPortEvent.PE:
  77.                 case SerialPortEvent.CD:
  78.                 case SerialPortEvent.CTS:
  79.                 case SerialPortEvent.DSR:
  80.                 case SerialPortEvent.RI:
  81.                 case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
  82.                         break;
  83.                 case SerialPortEvent.DATA_AVAILABLE:
  84.                         byte[] readBuffer = new byte[20];

  85.                         try {
  86.                                 while (inputStream.available() > 0) {
  87.                                         int numBytes = inputStream.read(readBuffer);
  88.                                 }
  89.                                 System.out.print(new String(readBuffer));
  90.                         } catch (IOException e) {
  91.                         }
  92.                         break;
  93.                 }
  94.         }

  95. }
复制代码
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-12-13 14:17 | 显示全部楼层
都说了用usb接口了,还有啥好说的。
其实不管是什么接口传到pc的数据,基本都是现在pc 内存里建立虚拟文件,读取数据的方法和读取文件基本类似,只是不同端口的虚拟文件名不一样而已,在java立,一般常用的端口都是相应的封装好的类,肯定不必自己开发。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-1-5 13:28 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-5-21 08:53 , Processed in 0.061507 second(s), 20 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表