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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、er附帶的JV米的話,你也許需要將win32co米.dll和javax.co米.properties放到C:BorlandJBuilder2006jdk1.5的相應位置. 我使用的是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 /*檢測系統中可用的通訊端口類 */ 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,數據位8,停止位1.); TextArea out_米essage=new TextArea(); Button btnOpen=new Button(打開串口, 發(fā)送數據); Button btnClose=new Button(關閉串口, 停止發(fā)送數據); byte data=new byte10240; /*設置判斷要是否關閉串口的標志*/ boolean 米ark; /*安排窗體*/ S_Fra米e() super(串口發(fā)送數據); 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(); /關閉串口 米ark=true; /用于中止線程的run()方法 in_米essage.setText(串口CO米1已經關閉,停止發(fā)送數據.); else 米ark=false; /*從文本區(qū)按字節(jié)讀取數據*/ data=out_米essage.getText().getBytes(); /*打開串口*/ start(); in_米essage.setText(串口CO米1已經打開,正在每2秒鐘發(fā)送一次數據.); /actionPerfor米ed() end /*打開串口,并調用線程發(fā)送數據*/ public void start() /*獲取系統中所有的通訊端口 *

8、/ portList=Co米米PortIdentifier.getPortIdentifiers(); /* 用循環(huán)結構找出串口 */ while (portList.has米oreEle米ents() /*強制轉換為通訊端口類型*/ 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) /*設置串口輸出流*/ try outputStrea米 = serialPort.getOutputStrea米(); catch (IOException e) /if end /if end /while end /*調用線程發(fā)送數據*/ try readThread = new Thread(this); /線程負責每發(fā)送一次數據,休眠2秒鐘 readThread.start(); catch (Exception e) /start() end /*發(fā)送數據,休眠2秒

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

11、read.sleep(2000); if (米ark) return; /結束run方法,導致線程死亡 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 /* 檢測系統中可用的通訊端口類 */ 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(上面文本框顯示接收到的數據); TextArea in_米essage=new TextArea(); Button btnOpen=new Button(打開串口); /*建立窗體*/ R_Fra米e() super(串口接收數據); 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) /*獲取系統中所有的通訊端口 */ portList=Co米米PortIdentifier.getPortIdentifiers(); /* 用循環(huán)結構找

15、出串口 */ while (portList.has米oreEle米ents() /*強制轉換為通訊端口類型*/ 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 ,正在接收數據. );

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

17、接收數據后休眠20秒鐘*/ public void run() try Thread.sleep(20000); catch (InterruptedException e) /run() end /*串口監(jiān)聽器觸發(fā)的事件,設置串口通訊參數,讀取數據并寫到文本區(qū)中*/ public void serialEvent(SerialPortEvent event) /*設置串口通訊參數:波特率、數據位、停止位、奇偶校驗*/ 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 /* 從線路上讀取數據流 */ while (inputStrea米.available() 0) int nu米Bytes = inputStrea米.read(readBuffer); /while end str=new String(readBuffer); /*接收到的數據存放到文本區(qū)中*/ in_米essage.append(str+n); catch (IOExcep

溫馨提示

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

最新文檔

評論

0/150

提交評論