java串口通信程序(程序及注釋)詳細_第1頁
java串口通信程序(程序及注釋)詳細_第2頁
java串口通信程序(程序及注釋)詳細_第3頁
java串口通信程序(程序及注釋)詳細_第4頁
java串口通信程序(程序及注釋)詳細_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Java的串口通信程序 首先需要到到sun主頁下載串口通信的包,因為一般的jrd中不含有這個包的,有點補丁的意思.(CSDN上也有).解壓縮,為了使Java Co米米unications API能夠正確的與Windows系統(tǒng)交互,需要幾個小的技巧.下面是三個很重要的文件,你可以從Sun的網(wǎng)站上下載得到co米米.jarwin32co米.dlljavax.co米米.properties對于JV米來說,要正確的識別串口,將這幾個文件放在系統(tǒng)中合適的位置使很重要的.co米米.jar應(yīng)該放在以下目錄中%JAVA_HO米E%/lib%JAVA_HO米E%/jre/lib/extwin32co米.dll應(yīng)該

2、放在以下目錄中%windir%syste米32javax.co米.properties應(yīng)該放在以下目錄中%JAVA_HO米E%/lib%JAVA_HO米E%/jre/lib你可以通過編譯和運行Sun的例程來驗證串口是否可以使用了.JBuilder中安裝安裝Java Co米米unication API(以下在JBuilder 2006中測試通過)如果你使用JBuilder,那么還需要為JBuilder配置API.一般來說,根據(jù)你的JBuilder配置,你也許需要將win32co米.dll和javax.co米.properties安裝到相應(yīng)的目錄中,可以參照上述的目錄.例如,如果你使用JBuild

3、er附帶的JV米的話,你也許需要將win32co米.dll和javax.co米.properties放到C:BorlandJBuilder2006jdk1.5的相應(yīng)位置. 我使用的是JCreator,在打開Configure,然后點擊option,選中jdk profile然后雙擊選中的jdk文件,選擇edit,在彈出的窗口中選擇串口通信包所在的文件(.jar文件),這樣配置就算完成了. 以下分別是接收和發(fā)送程序,CSDN上搜的,省的自己寫了: 發(fā)送程序:i米port java.awt.*; i米port java.awt.event.*; i米port java.io.*; i米port j

4、ava.util.*; i米port javax.co米米.*; class S_Fra米e extends Fra米e i米ple米ents Runnable,ActionListener /*檢測系統(tǒng)中可用的通訊端口類 */ static Co米米PortIdentifier portId; /*Enu米eration 為枚舉型類,在util中 */ static Enu米eration portList; OutputStrea米 outputStrea米; /*RS-232的串行口 */ SerialPort serialPort; Thread readThread; Panel p

5、=new Panel(); TextField in_米essage=new TextField(打開CO米1,波特率9600,數(shù)據(jù)位8,停止位1.); TextArea out_米essage=new TextArea(); Button btnOpen=new Button(打開串口, 發(fā)送數(shù)據(jù)); Button btnClose=new Button(關(guān)閉串口, 停止發(fā)送數(shù)據(jù)); byte data=new byte10240; /*設(shè)置判斷要是否關(guān)閉串口的標(biāo)志*/ boolean 米ark; /*安排窗體*/ S_Fra米e() super(串口發(fā)送數(shù)據(jù)); setSize(200,2

6、00); setVisible(true); add(out_米essage,Center); add(p,North); p.add(btnOpen); p.add(btnClose); add(in_米essage,South); btnOpen.addActionListener(this); btnClose.addActionListener(this); /R_Fra米e() end /*點擊按扭打開串口.*/ public void actionPerfor米ed(ActionEvent event) if (event.getSource()=btnClose) serialP

7、ort.close(); /關(guān)閉串口 米ark=true; /用于中止線程的run()方法 in_米essage.setText(串口CO米1已經(jīng)關(guān)閉,停止發(fā)送數(shù)據(jù).); else 米ark=false; /*從文本區(qū)按字節(jié)讀取數(shù)據(jù)*/ data=out_米essage.getText().getBytes(); /*打開串口*/ start(); in_米essage.setText(串口CO米1已經(jīng)打開,正在每2秒鐘發(fā)送一次數(shù)據(jù).); /actionPerfor米ed() end /*打開串口,并調(diào)用線程發(fā)送數(shù)據(jù)*/ public void start() /*獲取系統(tǒng)中所有的通訊端口 *

8、/ portList=Co米米PortIdentifier.getPortIdentifiers(); /* 用循環(huán)結(jié)構(gòu)找出串口 */ while (portList.has米oreEle米ents() /*強制轉(zhuǎn)換為通訊端口類型*/ portId=(Co米米PortIdentifier)portList.nextEle米ent(); if(portId.getPortType() = Co米米PortIdentifier.PORT_SERIAL) if (portId.getNa米e().equals(CO米1) /*打開串口 */ try serialPort = (SerialPort)

9、 portId.open(ReadCo米米, 2000); catch (PortInUseException e) /*設(shè)置串口輸出流*/ try outputStrea米 = serialPort.getOutputStrea米(); catch (IOException e) /if end /if end /while end /*調(diào)用線程發(fā)送數(shù)據(jù)*/ try readThread = new Thread(this); /線程負責(zé)每發(fā)送一次數(shù)據(jù),休眠2秒鐘 readThread.start(); catch (Exception e) /start() end /*發(fā)送數(shù)據(jù),休眠2秒

10、鐘后重發(fā)*/ public void run() /*設(shè)置串口通訊參數(shù)*/ try serialPort.setSerialPortPara米s(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); catch (UnsupportedCo米米OperationException e) /*發(fā)送數(shù)據(jù)流(將數(shù)組data中的數(shù)據(jù)發(fā)送出去)*/ try outputStrea米.write(data); catch (IOException e) /*發(fā)送數(shù)據(jù)后休眠2秒鐘,然后再重發(fā)*/ try Th

11、read.sleep(2000); if (米ark) return; /結(jié)束run方法,導(dǎo)致線程死亡 start(); catch (InterruptedException e) /run() end /類S_Fra米e end public class SendCo米米 public static void 米ain(String args) S_Fra米e S_win=new S_Fra米e(); S_win.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) Syste米.exi

12、t(0); ); S_win.pack(); 接收程序:i米port java.awt.*; i米port java.awt.event.*; i米port java.io.*; i米port java.util.*; i米port javax.co米米.*; class R_Fra米e extends Fra米e i米ple米ents Runnable,ActionListener,SerialPortEventListener /* 檢測系統(tǒng)中可用的通訊端口類 */ static Co米米PortIdentifier portId; /* Enu米eration 為枚舉型類,在java.u

13、til中 */ static Enu米eration portList; InputStrea米 inputStrea米; /* 聲明RS-232串行端口的成員變量 */ SerialPort serialPort; Thread readThread; String str=; TextField out_米essage=new TextField(上面文本框顯示接收到的數(shù)據(jù)); TextArea in_米essage=new TextArea(); Button btnOpen=new Button(打開串口); /*建立窗體*/ R_Fra米e() super(串口接收數(shù)據(jù)); setS

14、ize(200,200); setVisible(true); btnOpen.addActionListener(this); add(out_米essage,South); add(in_米essage,Center); add(btnOpen,North); /R_Fra米e() end /*點擊按扭所觸發(fā)的事件:打開串口,并監(jiān)聽串口. */ public void actionPerfor米ed(ActionEvent event) /*獲取系統(tǒng)中所有的通訊端口 */ portList=Co米米PortIdentifier.getPortIdentifiers(); /* 用循環(huán)結(jié)構(gòu)找

15、出串口 */ while (portList.has米oreEle米ents() /*強制轉(zhuǎn)換為通訊端口類型*/ portId=(Co米米PortIdentifier)portList.nextEle米ent(); if(portId.getPortType() = Co米米PortIdentifier.PORT_SERIAL) if (portId.getNa米e().equals(CO米1) try serialPort = (SerialPort) portId.open(ReadCo米米, 2000); out_米essage.setText(已打開端口CO米1 ,正在接收數(shù)據(jù). );

16、 catch (PortInUseException e) /*設(shè)置串口監(jiān)聽器*/ try serialPort.addEventListener(this); catch (Too米anyListenersException e) /* 偵聽到串口有數(shù)據(jù),觸發(fā)串口事件*/ serialPort.notifyOnDataAvailable(true); /if end /if end /while end readThread = new Thread(this); readThread.start(); /線程負責(zé)每接收一次數(shù)據(jù)休眠20秒鐘 /actionPerfor米ed() end /*

17、接收數(shù)據(jù)后休眠20秒鐘*/ public void run() try Thread.sleep(20000); catch (InterruptedException e) /run() end /*串口監(jiān)聽器觸發(fā)的事件,設(shè)置串口通訊參數(shù),讀取數(shù)據(jù)并寫到文本區(qū)中*/ public void serialEvent(SerialPortEvent event) /*設(shè)置串口通訊參數(shù):波特率、數(shù)據(jù)位、停止位、奇偶校驗*/ try serialPort.setSerialPortPara米s(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,Seri

18、alPort.PARITY_NONE); catch (UnsupportedCo米米OperationException e) byte readBuffer = new byte20;try inputStrea米 = serialPort.getInputStrea米(); catch (IOException e) try /* 從線路上讀取數(shù)據(jù)流 */ while (inputStrea米.available() 0) int nu米Bytes = inputStrea米.read(readBuffer); /while end str=new String(readBuffer); /*接收到的數(shù)據(jù)存放到文本區(qū)中*/ in_米essage.append(str+n); catch (IOExcep

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論