![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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;
}
}
}
No.2ベストアンサー
- 回答日時:
java.security.SecureClassLoaderのエラーのようなので、このアプレットに下のようなmain()を付けてローカルアプリケーションとして動かしてみて動けば、無署名アプレットはセキュリティ上の理由により、クライアントのシリアルポートにアクセスできないという結論になるでしょう。
すでに、ローカルアプリケーションとしては動かして見られたのかな?-------------------------------------------------
public static void main(String[] args){
SerialPortReader spr = new SerialPortReader();
Frame frame = new Frame();
frame.setSize(600, 600);
frame.add(spr);
frame.setVisible(true);
spr.init();
}
-----------------------------------------------
何度もご回答いただきありがとうございます。
教えていただいたmain文を追加したところアプリケーションにて
実行することができました。
本当にありがとうございました!
No.1
- 回答日時:
> エラーメッセージが表示され実行できませんでした
どんなエラーメッセージですか?。それがいちばん重要な診断情報です。
メッセージの全文、そしてソースの行番号などを示していたら、それがどの行かも教えてください。
この回答への補足
ご回答ありがとうございます。
説明が不足していて申し訳ありませんでした。
表示されたメッセージは以下の通りです。
よろしくお願いします。
at java.lang.NoClassDefFoundError: javax/comm/SerialPortEventListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:178)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:127)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at sun.applet.AppletClassLoader.loadCode(AppletPanel.java:618)
at sun.applet.AppletPanel.createApplet(AppletPanel.java:780)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:709)
at sun.applet.AppletPanel.run(AppletPanel.java:363)
at java.lang.Thread.run(Thread.java:619)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
java のstruts1.3です。
-
typeid演算子を使用すると警告...
-
エンターキーを押すとOKボタン...
-
ボタンのイベントで異なるウィ...
-
ボタンの複数割り当てについて
-
C#でキーイベントが発生しない...
-
C# 矢印キーの取得
-
書式の設定
-
シリアル通信で受信したデータ...
-
C#でのWNetAddConnection3の使...
-
androidプログラミングについて...
-
C#単体テストで、UnitTestの使...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
VBAで配列の計算
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
Junitテストでvoid戻り値メッソ...
-
Processingでマウスクリックで...
-
C#でのWNetAddConnection3の使...
-
ボタンのイベントで異なるウィ...
-
C#で別のFormへ複数の値を返そ...
-
GetDIBits関数の使い方について
-
【Java】画像表示が出来ない!
-
ボタンの複数割り当てについて
-
Thread.sleepのInterruptedExce...
-
C# MouseHoverを何度も呼ぶには
-
C# DataGridView列カスタマイズ
-
正規表現
-
unityでのC++エラーの原因がわ...
-
C# visibleプロパティをfalseに...
-
C# 矢印キーの取得
-
C#から、C++で作成したdll内の...
-
C#でキーイベントが発生しない...
-
JavaFXでの表内のチェックボッ...
おすすめ情報