- 浏览: 194511 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
hao3721:
dsfasd
ehcache 使用 -
nihaokid:
方法是不会存在在对象内存中的,它存在于方法区,建议看看jvm的 ...
Java 深层理解 父类引用指向子类对象 -
vissalan:
有一点没看明白Father f1 = (Father)s;这时 ...
Java 深层理解 父类引用指向子类对象 -
咖啡舞者:
非常感谢这种分享精神.
在BREW中实现自己的GUI(8)-IWEB的封装 -
咖啡舞者:
这是创建的代码。
在设备上调的。
界面在手机和模拟器上显示的差异
由于这几天要通过java调用通过串口或并口连接的硬件资源,所以我就要用到和底层的硬件进行通讯。通过RS-232的通讯协议,了解电脑和外设是怎样进行通讯的。在应用中我们也可以通过JNI来实现(详情请见http://hgq0011.iteye.com/blog/31508),这样的话,就必须知道更多的知识。由于java已经提供我们一个javacomm20-win32通用的API我们还是实行“拿来主义”吧。我就把整个应用的过程详细的说一下,希望给需要的人一点帮助。
我们经过串口和外设通讯,下面我就以串口为例进行解说。
1)我们要准备相应的设备。
电脑,外设,通过数据线把他们连接起来。
2)检验外设到底是用的那个COM口和电脑通讯的.
也就是说,他们有没有真确的连接上。我们可以通过下载串口通讯口测试软件,我用的是"SuperCommTool.exe"的绿色软件,进行测试的。这软件很适应,如果选中的某个COM已经被使用了,它会给你一个相应的提示(端口以被占用)。如果你不知道到底是使用的那个端口,那么你可以通过superCommTool软件一个一个的试,如果正常的话,那么你可以看到有数据显示在数据接收窗口。也许,有些主板的串口坏了,那么你就要买一个转接卡,通过PCI插口转接。
3)察看外设使用说明书知道外设的相关参数.
比如,波特率,数据位,停止位,校验位,等等。只有正确参数,才能显示正确的数据。当然,你可以在通讯测试软件上调试这些参数的。比如:波特率 = 2400,数据位 = 8,停止位 = 2 ,校验位 = 1。
4)准备开发环境。
最基本的JDK了,你可以使用自己钟爱的IDE,帮助你开发。IDE可能自带了JDK,那么 你要把相应的javaComm20-win32放到运行时使用的JDK中。 下载JAVAcomm20-win32。
5)了解javaComm20-win32。
你必须把win32com.dll复制到java.home/bin下;把javax.comm.properties复制到java.home/lib下;把comm.jar添加到你classPath下。前面两个都是非常重要的。
下面说明用到的几个类:
javax.comm.CommPortIdentifier
通讯端口管理器,CommPortIdentifier是控制访问到通讯端口的中 心类。它包括的方法有:
a. 通过驱动决定通讯端口是可用的。
b. 打开通讯端口为了I/O操作。
c. 决定端口的拥有者。
d. 解析端口拥有者的争夺。
e. 管理事件显示在端口拥有者的中的状态改变。
一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的 并且选择一个端口便于开始。然后它使用方法在其它类中想 CommPort,ParallelPort和SerialPort通过 这个端口进行通讯。
javax.comm.SerialPort
一个RS-232串口通讯端口。SerialPort 描述底层的接口到一个串口通讯端口
变得有效的通过底层的系统。SerialPort定义最小的必需的功能便于串口通讯端口。
javax.comm.SerialPortEventListener 串行端口事件传播。
javax.comm.CommDriver
6)代码的编写。
a. 获取SerialPort sPort对象的两种方法。
1) 2)
- System.loadLibrary("win32com");
- javax.comm.CommDriver driver = null;
- String driverName = "com.sun.comm.Win32Driver";
- SerialPort sPort = (SerialPort) driver.getCommPort("COM4", ommPortIdentifier.PORT_SERIAL);
- CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM4");
- SerialPort sPort = (SerialPort)portId.open("shipment",1000);
以上两种方法都可以。不过一般都会采用第二种。方法说明我们获取了对串行端口(COM4),可以和它进行通讯了。
b. 设置串行端口通讯参数。
- sPort.setSerialPortParams(2400,SerialPort.DATABITS_8,SerialPort.STOPBITS_2,SerialPort.PARITY_NONE);
c. 获取输入(出)流。
- InputStream is = sPort.getInputStream();//从外设获取数据
- OutputStream os = sPort.getOutputStream();//发送命令到外设
d.通过监听器就可以得到数据了。
- //Set notifyOnDataAvailable to true to allow event driven input.
- sPort.notifyOnDataAvailable(true);
- // Set notifyOnBreakInterrup to allow event driven break handling.
- sPort.notifyOnBreakInterrupt(true);
- // Set receive timeout to allow breaking out of polling loop during input handling.
- sPort.enableReceiveTimeout(30);
- StringBuffer linkWgt = new StringBuffer();//存放获取的数据
- sPort.addEventListener(
- new SerialPortEventListener(){
- public void serialEvent(SerialPortEvent e){
- int newData = 0;
- // Determine type of event.
- switch (e.getEventType()) {
- // Read data until -1 is returned. If \r is received substitute
- // \n for correct newline handling.
- case SerialPortEvent.DATA_AVAILABLE:
- while (newData != -1) {
- try {
- newData = is.read();
- if (newData == -1) {
- break;
- }
- if ('\r' == (char)newData) {
- } else {
- linkWgt.append((char)newData);
- }
- } catch (IOException ex) {
- System.err.println(ex);
- return;
- }
- }
- // Append received data to messageAreaIn.
- try{
- System.out.println("linkWgt ---------||||| "+Double.valueOf(linkWgt.toString()));
- }catch(Exception ew){
- ew.printStackTrace();
- }finally{
- try{
- //用完了,记得关闭端口。
- is.close();
- sPort.close();
- }catch(Exception c){
- c.printStackTrace();
- }
- }
- break;
- // If break event append BREAK RECEIVED message.
- case SerialPortEvent.BI:
- System.out.println("\n--- BREAK RECEIVED ---\n");
- }
- }
- }
- );
7)常见的异常
a. javax.comm.NoSuchPortException 这个说明你的javax.comm.properties没有放到正确的位置。
发表评论
-
Java实现通用线程池
2009-10-12 16:17 1033URL: http://blog.csdn.net/polar ... -
java 内存溢出分析
2009-10-09 15:44 1198内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终 ... -
Java的内存泄漏
2009-10-09 13:27 801Java 的一个重要优点就 ... -
dom4j操作xml基础--Visitor访问模式解析XML
2009-07-03 17:15 1323http://www.blogjava.net/bulktre ... -
Dom4j的全面解析
2009-07-03 17:03 983作者:冰云 icecloud(AT)sin ... -
20非常有用的Java程序片段 (下)
2009-05-26 14:29 107717. 把 Array 转换成 Map vi ... -
20非常有用的Java程序片段 (中)
2009-05-26 14:08 88112. 单实例Singleton 示例 请先阅读这篇文章 ... -
20非常有用的Java程序片段 (上)
2009-05-26 14:02 941下面是20个非常有用的Java程序片段,希望能对你有用。 1 ... -
java实现 冒泡排序 插入排序 选择排序
2009-03-16 00:47 1064package test.sort; public clas ... -
红黑树的Java实现
2009-03-16 00:42 943红黑树可能是要考虑情况最多的BST树了,它有自己的规则(见代码 ... -
排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
2009-03-16 00:40 1142转自:http://www.blogjava.net/java ... -
排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
2009-03-16 00:37 881转自:http://www.blogjava.net/java ... -
Java 深层理解 父类引用指向子类对象
2009-03-10 11:44 2638从对象的内存角度来理解试试. 假设现在有一个父类Father, ... -
java native method
2009-03-02 20:40 953一. 什么是Native Method 简单地讲,一个Na ... -
java 简介--学习笔记
2009-02-22 22:26 731一 java 特点 1 、简单 Java 设计 ... -
String理解
2009-02-21 00:44 836要理解 java中String的运作方式,必须明确一点:Str ... -
Java的时间处理
2009-02-21 00:42 8791. Java计算时间依靠1970 ...
相关推荐
用java编写的一个组件,用于windows下串口通信,我已经试过了,可以成功
java串口编程包,很好用 javax.comm.properties win32com.dll comm..jar
用Java实现串口通信(windows系统下),需要用到sun提供的串口包 javacomm20-win32.zip。
原官方javacomm-win32.zip工具类,包含jar包以及,全部对应的API。 注意:此jar包是用在windows系统的! 简述:其为SUN在1998年发布的串口通信API:comm2.0.jar(Windows下)、
内含 comm.jar, win32com.dll, javax.comm.properties, JAVA串口开发的配置及核心代码.txt
Comm20-win32用於串口開發,但是只支持32位的jdk,現在更多的是使用RXTX
java串口插件win64位, 用于串口连接、发送命令和监听。配套博文:https://blog.csdn.net/baidu_36583119/article/details/107286204
包含完整的javacomm20-win32和rxtxcomm for win64SDK。
java串口开发示例 内含win32com.dll、javax.comm.properties、comm.jar等文件 csdn上倒是资源不少,但积分要得太多了,好不容易在国外网站找到一个,免费共享给大家~~~
java串口通信包javacomm20-win32.zip Javax.comm是Sun公司提供的,用于开发平台独立的通讯应用程序的扩展API。(ps:这里javax的x很准确地表明了它是一个扩展包,而不是核心包(core package),但由于历史原因,...
Java 的串口通讯类包,将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件javax.comm....
C语言COMM(STC32G-DEMO-CODE-220311kw)C语言COMM(STC32G-DEMO-CODE-220311kw)C语言COMM(STC32G-DEMO-CODE-220311kw)C语言COMM(STC32G-DEMO-CODE-220311kw)C语言COMM(STC32G-DEMO-CODE-220311kw)C语言COMM...
javacomm64.zip
串口助手驱动程序,亲测可用,专门针对 1.win10 不能识别设备,显示黄色叹号 2,设备管理器中显示 pl2303自2012年已停产
用Java实现串口通信(windows系统下),需要用到sun提供的串口包 javacomm20-win32.zip。
http://www.ibm.com/developerworks/java/jdk/上下的 ibm-java-javacomm-3.0-0.0-linux-x86_64.tgz