追隨Java
簡(jiǎn)單的事情重復(fù)做,就會(huì)產(chǎn)生累積效應(yīng)!
BlogJava
首頁(yè)
新文章
新隨筆
聚合
管理
posts - 260, comments - 338, trackbacks - 0
關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
?????????????????????????????????關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)?
???????????????由于這幾天要通過(guò)java調(diào)用通過(guò)串口或并口連接的硬件資源,所以我就要用到和底層的硬件進(jìn)行通訊。通過(guò)RS-232的通訊協(xié)議,了解電腦和外設(shè)是怎樣進(jìn)行通訊的。在應(yīng)用中我們也可以通過(guò)JNI來(lái)實(shí)現(xiàn)(詳情請(qǐng)見(jiàn)http://m.tkk7.com/hgq0011/archive/2005/09/21/13637.html),這樣的話,就必須知道更多的知識(shí)。由于
java已經(jīng)提供我們一個(gè)javacomm20-win32通用的API我們還是實(shí)行 “拿來(lái)主義”
吧。我就把整個(gè)應(yīng)用的過(guò)程詳細(xì)的說(shuō)一下,希望給需要的人一點(diǎn)幫助。?
????????????我們經(jīng)過(guò)串口和外設(shè)通訊,下面我就以
串口為例進(jìn)行解說(shuō)
。?
????????????1)我們要準(zhǔn)備相應(yīng)的設(shè)備。
??????????????????電腦,外設(shè),通過(guò)數(shù)據(jù)線把他們連接起來(lái)。?
????????????2)檢驗(yàn)外設(shè)到底是用的那個(gè)COM口和電腦通訊的。
??????????????????也就是說(shuō),他們有沒(méi)有真確的連接上。我們可以通過(guò)下載串口通訊口測(cè)試軟件,我用的是
"SuperCommTool.exe"的綠色軟件,進(jìn)行測(cè)試的
。這軟件很適應(yīng),如果選中的某個(gè)COM已經(jīng)被使用了,它會(huì)給你一個(gè)相應(yīng)的提示(端口以被占用)。如果你不知道到底是使用的那個(gè)端口,那么你可以通過(guò)superCommTool軟件一個(gè)一個(gè)的試,如果正常的話,那么你可以看到有數(shù)據(jù)顯示在數(shù)據(jù)接收窗口。也許,有些主板的串口壞了,那么你就要買一個(gè)轉(zhuǎn)接卡,通過(guò)PCI插口轉(zhuǎn)接。?
????????????3)察看外設(shè)使用說(shuō)明書知道外設(shè)的相關(guān)參數(shù)。
???????????????比如,波特率,數(shù)據(jù)位,停止位,校驗(yàn)位,等等。只有正確參數(shù),才能顯示正確的數(shù)據(jù)。當(dāng)然,你可以在通訊測(cè)試軟件上調(diào)試這些參數(shù)的。比如:波特率 = 2400,數(shù)據(jù)位 = 8,停止位 = 2 ,校驗(yàn)位 = 1。?
????????????4)準(zhǔn)備開(kāi)發(fā)環(huán)境。
????????????最基本的JDK了,你可以使用自己鐘愛(ài)的IDE,幫助你開(kāi)發(fā)。IDE可能自帶了JDK,那么 你要把相應(yīng)的javaComm20-win32放到運(yùn)行時(shí)使用的JDK中。 下載JAVAcomm20-win32。
??????????5)了解javaComm20-win32。
????????????你必須把win32com.dll復(fù)制到j(luò)ava.home/bin下;把javax.comm.properties 復(fù)制到j(luò)ava.home/lib下;把comm.jar添加到你classPath下。
前面兩個(gè)都是非常重要的
。?
?????????????下面說(shuō)明用到的幾個(gè)類:?
??????????????????
javax.comm.CommPortIdentifier?
?????????????????????通訊端口管理器,CommPortIdentifier是控制訪問(wèn)到通訊端口的中 心類。
?????????????????????它包括的方法有:?
???????????????????????????a. 通過(guò)驅(qū)動(dòng)決定通訊端口是可用的。?
???????????????????????????b. 打開(kāi)通訊端口為了I/O操作。?
???????????????????????????c. 決定端口的擁有者。?
???????????????????????????d. 解析端口擁有者的爭(zhēng)奪。?
???????????????????????????e. 管理事件顯示在端口擁有者的中的狀態(tài)改變。?
?????????????????????一個(gè)應(yīng)用程序首先使用CommPortIdentifier中的方法,通過(guò)相關(guān)的驅(qū)動(dòng)去獲取那些通訊端口是可用的 并且選擇一個(gè)端口便于開(kāi)始。然后它使用方法在其它類中想CommPort,ParallelPort和SerialPort通過(guò) 這個(gè)端口進(jìn)行通訊。?
??????????????????
javax.comm.SerialPort
?
?????????????????????一個(gè)RS-232串口通訊端口。SerialPort 描述底層的接口到一個(gè)串口通訊端口 變得有效的通過(guò)底層的系統(tǒng)。SerialPort定義最小的必需的功能便于串口通訊端口。?
??????????????????
javax.comm.SerialPortEventListener
?
?????????????????????串行端口事件傳播。?
??????????????????
javax.comm.CommDriver
?
?????????6)代碼的編寫。?
???????????????a. 獲取SerialPort sPort對(duì)象的兩種方法。
???????????????????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
);
?????????????以上兩種方法都可以。不過(guò)一般都會(huì)采用第二種。方法說(shuō)明我們獲取了對(duì)串行端口(COM4),可以和它進(jìn)行通訊了。?
??????????????b. 設(shè)置串行端口通訊參數(shù)。
sPort.setSerialPortParams(
2400
,SerialPort.DATABITS_8,SerialPort.STOPBITS_2,SerialPort.PARITY_NONE);?
???????????????c. 獲取輸入(出)流。?
??????????????????
????????????InputStream?is?
=
?sPort.getInputStream();
//
從外設(shè)獲取數(shù)據(jù)?
??????????????
OutputStream?os?=?sPort.getOutputStream()
;
//
發(fā)送命令到外設(shè)
???????????????d.通過(guò)監(jiān)聽(tīng)器就可以得到數(shù)據(jù)了。
??????????????????
?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();
//
存放獲取的數(shù)據(jù)
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
????????????????????????????????????
//
用完了,記得關(guān)閉端口。
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)常見(jiàn)的異常
????????????????a. javax.comm.NoSuchPortException 這個(gè)說(shuō)明你的javax.comm.properties沒(méi)有放到正確的位置。
?如果有什么不正確的地方,歡迎批評(píng)指正,謝謝!
posted on 2007-03-23 09:48
Harryson
閱讀(5963)
評(píng)論(4)
編輯
收藏
所屬分類:
Jni--Communication
、
J2SE
FeedBack:
#
re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
2007-03-23 12:18 |
turbochen
沒(méi)什么可補(bǔ)充的,有興趣可以參考一下我2004年寫的文章:
http://blog.csdn.net/turbochen/archive/2004/05/07/8105.aspx
關(guān)于win32com.dll可以就放在你的應(yīng)用程序(.jar)所在的目錄。不用拔山涉水的放到j(luò)ava.home/bin下,破壞原目錄的內(nèi)容。
回復(fù)
更多評(píng)論
#
re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
2007-03-23 17:15 |
Christ Chang
原來(lái)那篇文章是你寫的,嚴(yán)重頂一下?。?nbsp;
回復(fù)
更多評(píng)論
#
re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
2007-09-21 00:16 |
dxr
頂一下?。?!
不過(guò)我沒(méi)有javax.comm類庫(kù),從網(wǎng)上也下載不了,能給我傳一個(gè)嗎?
我的郵箱是dxianr@163.com 先謝了!
回復(fù)
更多評(píng)論
#
re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
2013-01-31 12:28 |
lsc
javax.comm.CommDriver driver = null; diver沒(méi)有初始化吧?
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構(gòu)下實(shí)現(xiàn)與硬件(讀卡器)通訊
串口通訊
<
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
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(10)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類
(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
凱迪網(wǎng)絡(luò)
聯(lián)合早報(bào)
藍(lán)牙耳機(jī)
CSS
bindows
netvtm
Onestab
openwebdesign
UI設(shè)計(jì)
walterzorn
WebFx
藍(lán)色經(jīng)典論壇
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
源碼網(wǎng)
一個(gè)不錯(cuò)的源碼發(fā)布與下載網(wǎng)站
ProjectManagement
domain-driven design
信息資源
軟件架構(gòu)
項(xiàng)目管理者聯(lián)盟
友情Blog
@misseye
BuggyBean
Gavin King
James Strachan
JC
liuruhong
Rami
Rory Ye
techno.blog("Dion")
utopian
Waterye
平和大度 探索追求
夢(mèng)想風(fēng)暴
獨(dú)釣寒江
透明思考
最新隨筆
1.? 工作認(rèn)真就夠了嗎?
2.? 出門在外請(qǐng)多注意安全
3.?物業(yè)管理公司太不負(fù)責(zé)任,真讓人氣憤
4.?你是否還在為學(xué)歷在擔(dān)心?
5.?公司準(zhǔn)備上ERP的情況
6.?WAS非常奇怪的問(wèn)題
7.?系統(tǒng)上線感悟
8.?關(guān)注自己的職業(yè)發(fā)展方向
9.?硬盤資料整理好了嗎?備份了嗎?
10.?說(shuō)說(shuō)公司給大家工作PC的配置?
11.?CVS使用注意
12.?空調(diào)噪音問(wèn)題嚴(yán)重
13.?私活就那么難搞定嗎?
14.?用groovy你能做一些酷的事情
15.?acegi是一個(gè)很好的開(kāi)源項(xiàng)目,通過(guò)認(rèn)證和授權(quán)來(lái)保護(hù)資源
最新評(píng)論
1.?re: spring初始化時(shí)出錯(cuò)了,[未登錄](méi)
沒(méi)有編譯好
--ff
2.?re: Error creating bean with name
@呵呵
缺少包。commons-pool.jar
--tlj
3.?re: 正則表達(dá)式(限制text只允許輸入int ,float)
去你媽逼滴
--操你媽
4.?re: 正則表達(dá)式(限制text只允許輸入int ,float)
1212
--ht
5.?dddddddddddd
ddddddddddddddddd
--ddddddddddddd
6.?re: 關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)
javax.comm.CommDriver driver = null; diver沒(méi)有初始化吧?
--lsc
7.?re: spring+hibernate初始化出錯(cuò),錯(cuò)誤真是隱蔽得很,讓人郁悶,,,
太感謝了,這個(gè)問(wèn)題弄了我超久
--qiuzhiye51
8.?re: org.hibernate.PropertyNotFoundException: Could not find a getter for empDeptId in class com.legend.shipment.Temployee
太謝謝了 這個(gè)問(wèn)題我找了很久 謝謝
--sos
9.?re: javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構(gòu)下實(shí)現(xiàn)與硬件(讀卡器)通訊
與硬件通訊的dll還需要自己寫嗎?
--南無(wú)
10.?re: 太不負(fù)責(zé)任,真讓人氣憤
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--8989899
閱讀排行榜
1.?當(dāng) IDENTITY_INSERT 設(shè)置為 OFF 時(shí),不能向表 中的標(biāo)識(shí)列插入顯式值。(30221)
2.?Error creating bean with name (18556)
3.?CPU使用率不高,內(nèi)存怎么使用率也不高,但系統(tǒng)假死了(9260)
4.?org.hibernate.PropertyNotFoundException: Could not find a getter for empDeptId in class com.legend.shipment.Temployee(8700)
5.?PowerDesigner學(xué)習(xí)指南(8214)
6.?spring+hibernate初始化出錯(cuò),錯(cuò)誤真是隱蔽得很,讓人郁悶,,,(7928)
7.?私活就那么難搞定嗎?(7703)
8.?javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構(gòu)下實(shí)現(xiàn)與硬件(讀卡器)通訊(6209)
9.?用hibernate作為持久層,update是出現(xiàn)了重復(fù)記錄(6184)
10.?關(guān)于java使用javacomm20-win32實(shí)踐總結(jié)(5963)
11.?正則表達(dá)式(限制text只允許輸入int ,float)(5612)
12.?spring+hibernate下連接兩個(gè)以上的數(shù)據(jù)庫(kù)(5312)
13.?Cannot create JDBC driver of class (4911)
14.?jboss+eclipse+jboss-IDE部署運(yùn)行EJB3(4894)
15.?ResultSet can not re-read row data for column(4823)
評(píng)論排行榜
1.?GMail邀請(qǐng)函(43)
2.?私活就那么難搞定嗎?(19)
3.?合同期滿,是留還是跳,怎樣抉擇?(16)
4.?javascript 與applet的通訊 和java與c(dll文件)通訊,最終在b/s架構(gòu)下實(shí)現(xiàn)與硬件(讀卡器)通訊(13)
5.?ResultSet can not re-read row data for column(11)
6.?當(dāng) IDENTITY_INSERT 設(shè)置為 OFF 時(shí),不能向表 中的標(biāo)識(shí)列插入顯式值。(11)
7.?出事了,盜版被抓,(11)
8.?PowerDesigner學(xué)習(xí)指南(9)
9.?奇怪的死機(jī)??(9)
10.?項(xiàng)目(框架)架構(gòu)的抉擇(8)
Copyright ©2025 Harryson Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
成人精品视频99在线观看免费
|
亚洲人成网站在线观看播放动漫
|
男女午夜24式免费视频
|
日韩免费高清播放器
|
无码精品一区二区三区免费视频
|
亚洲午夜久久久久久久久电影网
|
亚洲区日韩精品中文字幕
|
丰满亚洲大尺度无码无码专线
|
粉色视频免费入口
|
国产啪精品视频网站免费尤物
|
在线亚洲v日韩v
|
国产亚洲综合久久
|
亚洲三级中文字幕
|
亚洲av无码av在线播放
|
美女啪啪网站又黄又免费
|
国产高清对白在线观看免费91
|
a毛片免费全部播放完整成
|
特级无码毛片免费视频尤物
|
h视频在线观看免费完整版
|
成年18网站免费视频网站
|
免费一看一级毛片人
|
国产av无码专区亚洲av果冻传媒
|
国产亚洲精品美女久久久
|
亚洲色偷偷av男人的天堂
|
亚洲综合无码一区二区痴汉
|
妇女自拍偷自拍亚洲精品
|
你是我的城池营垒免费看
|
24小时日本韩国高清免费
|
日韩成全视频观看免费观看高清
|
亚洲AV无码一区二区三区牲色
|
亚洲AV日韩AV一区二区三曲
|
四虎影视永久在线精品免费
|
久久国产精品免费观看
|
免费无码精品黄AV电影
|
亚洲国产aⅴ综合网
|
亚洲AV成人一区二区三区AV
|
2020久久精品亚洲热综合一本
|
成人嫩草影院免费观看
|
222www免费视频
|
在线a亚洲v天堂网2018
|
亚洲AV永久无码精品成人
|