Quantcast
Channel: OKWAVE 閲覧数の多い質問(Java/253)【本日】
Viewing all articles
Browse latest Browse all 68675

シリアル通信で受信したデータによる図の描写

$
0
0
RS-232Cのシリアル通信により受信したデータをもとに appletに図を描写するプログラムを考えています。 まず受信したデータをコマンドプロンプトに出力することはできたのですがプログラムを改良して 受信データを用いてappletに図を描こうとしたところ コンパイルはできたのですがappletで実行すると コマンドプロンプトにエラーメッセージが表示され実行できませんでした。 プログラムは以下の通りです。 分かる方がおられたらご回答のほどよろしくお願いします。 import javax.comm.*; import java.io.*; import java.util.*; import java.applet.Applet; import java.awt.*; public class SerialPortReader extends Applet implements SerialPortEventListener { protected SerialPort port; private InputStream is; public int newData; public void init(){ String portName = "COM6"; CommPortIdentifier portID = null; try{ // COM6 のCommPortIdentifier を取得 portID = CommPortIdentifier.getPortIdentifier(portName); }catch(NoSuchPortException ex){ ex.printStackTrace(); System.exit(1); } try{ //ポートのオープン port = (SerialPort)portID.open("SerialPortWriter", 5000); }catch(PortInUseException ex){ ex.printStackTrace(); System.exit(1); } try { // 通信速度などの通信条件の設定 port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT); } catch (UnsupportedCommOperationException ex){ ex.printStackTrace(); System.exit(1); } try { // SerialPortEvent を受け取るためのリスナの登録 port.addEventListener(this); } catch(TooManyListenersException ex){ ex.printStackTrace(); System.exit(1); } // Data Available イベントを受け取るようにする port.notifyOnDataAvailable(true); try { //COM6ポートから入力ストリームを取得する is = port.getInputStream(); } catch (IOException ex){ ex.printStackTrace(); System.exit(1); } } //受信データの大きさの円を描く public void paint(Graphics g) { g.fillOval(50, 50 , newData , newData); } // SerialPortEvent 処理ルーチン public void serialEvent(SerialPortEvent event) { newData = 0; switch(event.getEventType()) { case SerialPortEvent.BI: case SerialPortEvent.OE: case SerialPortEvent.FE: case SerialPortEvent.PE: case SerialPortEvent.CD: case SerialPortEvent.CTS: case SerialPortEvent.DSR: case SerialPortEvent.RI: case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // Data Available 以外のイベントは処理しない break; case SerialPortEvent.DATA_AVAILABLE: while (newData != -1) { try { //入力ストリームから次のバイトデータを読み込む newData = is.read(); //十進数のアスキーコードから0~9の整数に変換 newData = newData - 48; //受信データを元にグラフ表示 repaint(); //入力ストリームからバイトデータがなくなったら処理を終える if (newData == -1) { break; } } catch (IOException ex) { System.err.println(ex); return; } } break; } } }

Viewing all articles
Browse latest Browse all 68675


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>