追隨Java
簡單的事情重復做,就會產生累積效應!
BlogJava
首頁
新文章
新隨筆
聚合
管理
posts - 260, comments - 338, trackbacks - 0
關于java使用javacomm20-win32實踐總結
?????????????????????????????????關于java使用javacomm20-win32實踐總結?
???????????????由于這幾天要通過java調用通過串口或并口連接的硬件資源,所以我就要用到和底層的硬件進行通訊。通過RS-232的通訊協議,了解電腦和外設是怎樣進行通訊的。在應用中我們也可以通過JNI來實現(詳情請見http://m.tkk7.com/hgq0011/archive/2005/09/21/13637.html),這樣的話,就必須知道更多的知識。由于
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)
???????????????????????????
System.loadLibrary(
"
win32com
"
);?
??????????????????????????????javax.comm.CommDriver?driver?
=
?
null
;?
??????????????????????????????String?driverName?
=
?
"
com.sun.comm.Win32Driver
"
;?
????????????????????????????? SerialPort?sPort?
=
?(SerialPort)?driver.getCommPort(
"
COM4
"
,?CommPortIdentifier.PORT_SERIAL);?
??????????????????2)
??????????????????????
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.通過監聽器就可以得到數據了。
??????????????????
?1
//
Set?notifyOnDataAvailable?to?true?to?allow?event?driven?input.
?2
????????????sPort.notifyOnDataAvailable(
true
);
?3
?4
?????????????
//
?Set?notifyOnBreakInterrup?to?allow?event?driven?break?handling.
?5
????????????sPort.notifyOnBreakInterrupt(
true
);
?6
?7
?????????????
//
?Set?receive?timeout?to?allow?breaking?out?of?polling?loop?during??input?handling.
?8
????????????sPort.enableReceiveTimeout(
30
);
?9
????????????StringBuffer?linkWgt?
=
?
new
?StringBuffer();
//
存放獲取的數據
10
????????????sPort.addEventListener(?
11
????????????????
new
?SerialPortEventListener()
{
12
????????????????????
public
?
void
?serialEvent(SerialPortEvent?e)
{
13
????????????????????????
int
?newData?
=
?
0
;
14
????????????????????????
//
?Determine?type?of?event.
15
????????????????????????
switch
?(e.getEventType())?
{
16
????????????????????????
//
?Read?data?until?-1?is?returned.?If?\r?is?received?substitute
17
????????????????????????????
//
?\n?for?correct?newline?handling.
18
????????????????????????????
case
?SerialPortEvent.DATA_AVAILABLE:
19
????????????????????????????????
while
?(newData?
!=
?
-
1
)?
{
20
????????????????????????????????????
try
?
{
21
????????????????????????????????????????newData?
=
?is.read();
22
????????????????????????????????????????
if
?(newData?
==
?
-
1
)?
{
23
????????????????????????????????????????????
break
;
24
????????????????????????????????????????}
25
????????????????????????????????????????
if
?(
'
\r
'
?
==
?(
char
)newData)?
{
26
????????????????????????????????????????}
?
else
?
{
27
????????????????????????????????????????????linkWgt.append((
char
)newData);
28
????????????????????????????????????????}
29
????????????????????????????????????}
?
catch
?(IOException?ex)?
{
30
????????????????????????????????????????System.err.println(ex);
31
????????????????????????????????????????
return
;
32
????????????????????????????????????}
33
????????????????????????????????}
34
35
????????????????????????????
//
?Append?received?data?to?messageAreaIn.
36
????????????????????????????
37
?????????????????????????????
try
{
38
????????????????????????????????System.out.println(
"
linkWgt?---------|||||??????????
"
+
Double.valueOf(linkWgt.toString()));
39
????????????????????????????????
40
?????????????????????????????}
catch
(Exception?ew)
{
41
?????????????????????????????????ew.printStackTrace();
42
?????????????????????????????}
finally
{
43
?????????????????????????????????
try
{
44
????????????????????????????????????
//
用完了,記得關閉端口。
45
?????????????????????????????????????is.close();
46
????????????????????????????????????sPort.close();
47
?????????????????????????????????}
catch
(Exception?c)
{
48
?????????????????????????????????????c.printStackTrace();
49
?????????????????????????????????}
50
?????????????????????????????}
51
????????????????????????????
break
;
52
????????????????????????????
//
?If?break?event?append?BREAK?RECEIVED?message.
53
????????????????????????????
case
?SerialPortEvent.BI:
54
????????????????????????????????System.out.println(
"
\n---?BREAK?RECEIVED?---\n
"
);
55
????????????????????????}
56
????????????????????}
57
58
????????????????}
59
????????????);
??????????7)常見的異常
????????????????a. javax.comm.NoSuchPortException 這個說明你的javax.comm.properties沒有放到正確的位置。
?如果有什么不正確的地方,歡迎批評指正,謝謝!
posted on 2007-03-23 09:48
Harryson
閱讀(5961)
評論(4)
編輯
收藏
所屬分類:
Jni--Communication
、
J2SE
FeedBack:
#
re: 關于java使用javacomm20-win32實踐總結
2007-03-23 12:18 |
turbochen
沒什么可補充的,有興趣可以參考一下我2004年寫的文章:
http://blog.csdn.net/turbochen/archive/2004/05/07/8105.aspx
關于win32com.dll可以就放在你的應用程序(.jar)所在的目錄。不用拔山涉水的放到java.home/bin下,破壞原目錄的內容。
回復
更多評論
#
re: 關于java使用javacomm20-win32實踐總結
2007-03-23 17:15 |
Christ Chang
原來那篇文章是你寫的,嚴重頂一下!!
回復
更多評論
#
re: 關于java使用javacomm20-win32實踐總結
2007-09-21 00:16 |
dxr
頂一下!!!
不過我沒有javax.comm類庫,從網上也下載不了,能給我傳一個嗎?
我的郵箱是dxianr@163.com 先謝了!
回復
更多評論
#
re: 關于java使用javacomm20-win32實踐總結
2013-01-31 12:28 |
lsc
javax.comm.CommDriver driver = null; diver沒有初始化吧?
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
關于java使用javacomm20-win32實踐總結
javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構下實現與硬件(讀卡器)通訊
串口通訊
<
2007年3月
>
日
一
二
三
四
五
六
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(10)
給我留言
查看公開留言
查看私人留言
隨筆分類
(319)
AJAX(4)
Coffee House(78)
cvs(2)
cygwin(2)
Eclipse(5)
EJB(13)
ERP(2)
Hibernate(15)
Html(9)
iBatis(3)
IDE(5)
J2SE(17)
Javascript(14)
Jboss(10)
Jdbc(4)
Jni--Communication(3)
Management(18)
NetWork(7)
Oracle
PowerDesigner(2)
Proxool(1)
Question(12)
SoftwareEngineering(20)
Spring(17)
SqlServer(18)
Struts(4)
Tutorial(15)
VFP(1)
Web Service (1)
WebWork(6)
WSAD(11)
AJAX
Buffalo
DWR
Coffee House
CCTV
slashdotcn
verycd
凱迪網絡
聯合早報
藍牙耳機
CSS
bindows
netvtm
Onestab
openwebdesign
UI設計
walterzorn
WebFx
藍色經典論壇
Java
IBM
Java.net
Java.sun
JavaWorld
JAVA天下
onjava
sourceforge
JavaScript
JavaScript論壇
Open Source
Apache
bjug
Codehaus
crack
eclipse-plugins
grails
Hibernate
Jboss
laszlo
Midwinter
OpenOffice
Spring
theserverside
WebWork
webworkSc
源碼網
一個不錯的源碼發布與下載網站
ProjectManagement
domain-driven design
信息資源
軟件架構
項目管理者聯盟
友情Blog
@misseye
BuggyBean
Gavin King
James Strachan
JC
liuruhong
Rami
Rory Ye
techno.blog("Dion")
utopian
Waterye
平和大度 探索追求
夢想風暴
獨釣寒江
透明思考
最新隨筆
1.? 工作認真就夠了嗎?
2.? 出門在外請多注意安全
3.?物業管理公司太不負責任,真讓人氣憤
4.?你是否還在為學歷在擔心?
5.?公司準備上ERP的情況
6.?WAS非常奇怪的問題
7.?系統上線感悟
8.?關注自己的職業發展方向
9.?硬盤資料整理好了嗎?備份了嗎?
10.?說說公司給大家工作PC的配置?
11.?CVS使用注意
12.?空調噪音問題嚴重
13.?私活就那么難搞定嗎?
14.?用groovy你能做一些酷的事情
15.?acegi是一個很好的開源項目,通過認證和授權來保護資源
最新評論
1.?re: spring初始化時出錯了,[未登錄]
沒有編譯好
--ff
2.?re: Error creating bean with name
@呵呵
缺少包。commons-pool.jar
--tlj
3.?re: 正則表達式(限制text只允許輸入int ,float)
去你媽逼滴
--操你媽
4.?re: 正則表達式(限制text只允許輸入int ,float)
1212
--ht
5.?dddddddddddd
ddddddddddddddddd
--ddddddddddddd
6.?re: 關于java使用javacomm20-win32實踐總結
javax.comm.CommDriver driver = null; diver沒有初始化吧?
--lsc
7.?re: spring+hibernate初始化出錯,錯誤真是隱蔽得很,讓人郁悶,,,
太感謝了,這個問題弄了我超久
--qiuzhiye51
8.?re: org.hibernate.PropertyNotFoundException: Could not find a getter for empDeptId in class com.legend.shipment.Temployee
太謝謝了 這個問題我找了很久 謝謝
--sos
9.?re: javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構下實現與硬件(讀卡器)通訊
與硬件通訊的dll還需要自己寫嗎?
--南無
10.?re: 太不負責任,真讓人氣憤
評論內容較長,點擊標題查看
--8989899
閱讀排行榜
1.?當 IDENTITY_INSERT 設置為 OFF 時,不能向表 中的標識列插入顯式值。(30219)
2.?Error creating bean with name (18554)
3.?CPU使用率不高,內存怎么使用率也不高,但系統假死了(9260)
4.?org.hibernate.PropertyNotFoundException: Could not find a getter for empDeptId in class com.legend.shipment.Temployee(8698)
5.?PowerDesigner學習指南(8212)
6.?spring+hibernate初始化出錯,錯誤真是隱蔽得很,讓人郁悶,,,(7926)
7.?私活就那么難搞定嗎?(7701)
8.?javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構下實現與硬件(讀卡器)通訊(6207)
9.?用hibernate作為持久層,update是出現了重復記錄(6183)
10.?關于java使用javacomm20-win32實踐總結(5961)
11.?正則表達式(限制text只允許輸入int ,float)(5610)
12.?spring+hibernate下連接兩個以上的數據庫(5311)
13.?Cannot create JDBC driver of class (4910)
14.?jboss+eclipse+jboss-IDE部署運行EJB3(4892)
15.?ResultSet can not re-read row data for column(4822)
評論排行榜
1.?GMail邀請函(43)
2.?私活就那么難搞定嗎?(19)
3.?合同期滿,是留還是跳,怎樣抉擇?(16)
4.?javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構下實現與硬件(讀卡器)通訊(13)
5.?ResultSet can not re-read row data for column(11)
6.?當 IDENTITY_INSERT 設置為 OFF 時,不能向表 中的標識列插入顯式值。(11)
7.?出事了,盜版被抓,(11)
8.?PowerDesigner學習指南(9)
9.?奇怪的死機??(9)
10.?項目(框架)架構的抉擇(8)
Copyright ©2025 Harryson Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
国产又黄又爽又刺激的免费网址
|
亚洲精品高清无码视频
|
黄色一级毛片免费看
|
伊人久久精品亚洲午夜
|
无码人妻久久一区二区三区免费丨
|
亚洲香蕉在线观看
|
亚洲精品无码久久不卡
|
中文字幕免费视频
|
亚洲女子高潮不断爆白浆
|
国产gv天堂亚洲国产gv刚刚碰
|
精品久久8x国产免费观看
|
国产亚洲精彩视频
|
亚洲精品视频专区
|
亚洲国产精品视频
|
亚洲国产精华液2020
|
国产亚洲综合成人91精品
|
大地资源二在线观看免费高清
|
中文精品人人永久免费
|
亚洲日韩国产欧美一区二区三区
|
国产成人亚洲综合色影视
|
日本亚洲免费无线码
|
中文日本免费高清
|
亚洲熟妇无码一区二区三区导航
|
亚洲第一极品精品无码久久
|
日韩黄色免费观看
|
91人人区免费区人人
|
igao激情在线视频免费
|
亚洲成在人线aⅴ免费毛片
|
久久亚洲中文字幕精品有坂深雪
|
四虎影视成人永久免费观看视频
|
亚洲天堂男人天堂
|
亚洲中文字幕视频国产
|
www一区二区www免费
|
亚洲夂夂婷婷色拍WW47
|
亚洲高清视频在线播放
|
国国内清清草原免费视频99
|
免费国产成人α片
|
中文字幕免费观看视频
|
日韩精品免费一线在线观看
|
亚洲AV无码国产剧情
|
亚洲国产视频久久
|