?? sendcomm.java
字號:
/******************************************
* 程序文件名稱:SendComm.java
* 功能:從串行口COM1中發送數據
******************************************/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.comm.*;
class S_Frame extends Frame implements Runnable,ActionListener
{
/*檢測系統中可用的通訊端口類 */
static CommPortIdentifier portId;
/*Enumeration 為枚舉型類,在util中 */
static Enumeration portList;
OutputStream outputStream;
/*RS-232的串行口 */
SerialPort serialPort;
Thread readThread;
Panel p=new Panel();
TextField in_message=new TextField("打開COM1,波特率9600,數據位8,停止位1.");
TextArea out_message=new TextArea();
Button btnOpen=new Button("打開串口, 發送數據");
Button btnClose=new Button("關閉串口, 停止發送數據");
byte data[]=new byte[10240];
/*設置判斷要是否關閉串口的標志*/
boolean mark;
/*安排窗體*/
S_Frame()
{ super("串口發送數據");
setSize(200,200);
setVisible(true);
add(out_message,"Center");
add(p,"North");
p.add(btnOpen);
p.add(btnClose);
add(in_message,"South");
btnOpen.addActionListener(this);
btnClose.addActionListener(this);
} //R_Frame() end
/*點擊按扭打開串口.*/
public void actionPerformed(ActionEvent event) {
if (event.getSource()==btnClose){
serialPort.close();//關閉串口
mark=true; //用于中止線程的run()方法
in_message.setText("串口COM1已經關閉,停止發送數據.");
}
else { mark=false;
/*從文本區按字節讀取數據*/
data=out_message.getText().getBytes();
/*打開串口*/
start();
in_message.setText("串口COM1已經打開,正在每2秒鐘發送一次數據.....");
}
} //actionPerformed() end
/*打開串口,并調用線程發送數據*/
public void start(){
/*獲取系統中所有的通訊端口 */
portList=CommPortIdentifier.getPortIdentifiers();
/* 用循環結構找出串口 */
while (portList.hasMoreElements()){
/*強制轉換為通訊端口類型*/
portId=(CommPortIdentifier)portList.nextElement();
if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
if (portId.getName().equals("COM1")) {
/*打開串口 */
try {
serialPort = (SerialPort) portId.open("ReadComm", 2000);
}
catch (PortInUseException e) { }
/*設置串口輸出流*/
try {
outputStream = serialPort.getOutputStream();
}
catch (IOException e) {}
} //if end
} //if end
} //while end
/*調用線程發送數據*/
try{
readThread = new Thread(this);
//線程負責每發送一次數據,休眠2秒鐘
readThread.start();
}
catch (Exception e) { }
} //start() end
/*發送數據,休眠2秒鐘后重發*/
public void run() {
/*設置串口通訊參數*/
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
catch (UnsupportedCommOperationException e) { }
/*發送數據流(將數組data[]中的數據發送出去)*/
try {
outputStream.write(data);
}
catch (IOException e) { }
/*發送數據后休眠2秒鐘,然后再重發*/
try { Thread.sleep(2000);
if (mark)
{return; //結束run方法,導致線程死亡
}
start();
}
catch (InterruptedException e) { }
} //run() end
} //類S_Frame end
public class SendComm
{public static void main(String args[])
{ S_Frame S_win=new S_Frame();
S_win.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0); }
});
S_win.pack();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -