アプレットでRS232Cの制御

このQ&Aのポイント
  • アプレットでRS232Cの制御を行うプログラムを作っています。制御といってもDTRのピンをON,OFFするだけのものです。
  • ブラウザで起動させ処理が終わる前にCtrl+F5で更新を行うとエラーが発生し、以後アプレットが正常に動作しなくなります。
  • ヒントを教えていただければ助かります。
回答を見る
  • ベストアンサー

アプレットでRS232Cの制御

アプレットでRS232Cの制御を行うプログラムを作っています。 制御といってもDTRのピンをON,OFFするだけのものです。 動作はしてるのですがブラウザで起動させ処理が終わる前にCtrl+F5で更新を行うと次のようなエラーが発生し、以後ブラウザを閉じるまでアプレットが正常に動作しなくなります。 【エラー】 Error loading win32com: java.lang.UnsatisfiedLinkError: Native Library C:\Program Files\Java\jre1.6.0_01\bin\win32com.dll already loaded in another classloader 宜しければヒントだけでも教えていただければ助かります。

  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.3

>署名をつけたcomm.jarにアプレットを入れそれを実行しています。 >これだと一応クライアント側ですよね? この場合のcomm.jarは、 「クライアント側に前もってインストールされているもの」ではなく、 「サーバに配置(し、クライアント側マシンに配信)するもの」ですよね? --- >JREのlib/extにcomm.jarを入れても読み込まないため アプレットのソースコード内に System.out.println("java.ext.dirs="+System.getProperty("java.ext.dirs")); を埋め込んで、java.ext.dirsの値が適正かどうか確認してみてはどうでしょうか。 値が不正(※実行JREのlib/extを含んでいない)なら、JREを再インストール。 値が適正であったなら、ちょっと僕にはわかりません。

exiter
質問者

お礼

>java.ext.dirsの値が適正かどうか確認してみてはどうでしょうか。 java.ext.dirsの値は正しかったですがcommをそこに配置していませんでした・・・ commをjava.ext.dirsに配置しなおしたら無事に動作いたしました。 本当にありがとうございました。

その他の回答 (2)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

comm.jarを 「実行しているJREのlib/ext」 にインストールしてますか? (要するに 「クライアント側マシンにインストールしたcomm.jarを 利用するようになってますか?」 ということ) --- あとはちょっとわかりません・・・。

exiter
質問者

補足

署名をつけたcomm.jarにアプレットを入れそれを実行しています。 (JREのlib/extにcomm.jarを入れても読み込まないため) これだと一応クライアント側ですよね?

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

これ使ってるんでしょうか。 http://www.okakogi.go.jp/People/miwa/program/how2com/how2com.html 何か既存のライブラリを使っているなら、 まずは 「正しく」インストールしているか、 「正しく」使っているか、 確認してみては。 --- また、 ブラウザの「リロード対象」になるクラスファイル内に 「DLLを呼び出すコード」を記述していると、 エラーが発生するっぽいです。 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4286309

exiter
質問者

補足

Java Communication APIを使用して制御しております。 使い方はそちらのサイトを参考にしております。 おそらく指摘された >ブラウザの「リロード対象」になるクラスファイル内に >「DLLを呼び出すコード」を記述していると、 >エラーが発生するっぽいです。 っていうのが原因だと思います。 以下ソースです。何かお気づきの点がありましたら指摘お願いいたします。 public class Rec extends Applet{ public void init(){ } public void start(){ try { showList(); } catch (PortInUseException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (NoSuchPortException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (InterruptedException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (InstantiationException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IllegalAccessException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } public void showList() throws PortInUseException, NoSuchPortException, InterruptedException, InstantiationException, IllegalAccessException, ClassNotFoundException{ CommDriver driver = (CommDriver)Class.forName("com.sun.comm.Win32Driver").newInstance(); driver.initialize(); //ポートの指定 CommPortIdentifier id = CommPortIdentifier.getPortIdentifier("COM1"); //ポートを開く SerialPort port = (SerialPort)id.open("COM1", 1000); //RTSをFalseに port.setRTS(false); //1秒待機 Thread.sleep(1000); //ポートを閉じる port.close(); }

関連するQ&A

  • C#でJAVAアプレットを作る

    C#でJAVAアプレットのようなクライアントのブラウザ上で動くプログラムを作りたいと思うのですが、できるのでしょうか?ご存知の方よろしくお願いします。

  • RS232C 制御方法

    使用しているマザーボードから出ているCOM(RS232C)を使用して RS485変換回路を考えております。 初歩的な話になり申し訳ありませんが、RS232Cは送信と受信同時にはできないですよね。 現在RTS制御を行おうと考えております。 [RTS]と[CTS]をループバックにて接続し、 [DTR]と[DSR]をループバックして接続しています。 [RTS]が"H"になるとRS485の送信側を有効にし [RTS]が"L"になるとRS485の受信側を有効にしようと考えております。 受信を受け付ける際に[CD]が"H"になっていないといけないのでしょうか。 [CD]を常に"H"に固定すると問題はあるのでしょうか。 全てにおいて初歩的なお話になり申し訳ありません。 何方かご存知のた方お願い致します。

  • VBで通信のDTR,RTSを制御できるでしょうか?

    VBの通信プログラムを USB→RS232C変換→RS485変換したいのです。 某メーカのRS485変換器は送信/受信の制御はDTR,RTSによります。 VBのプログラムを動作させるとDTR,RTSは常時ONです。 これを 1.DTR(RTS)をONする 2.送信する 3.DTR(RTS)をOFFする というように(送信中のみDTR(RTS)をONする)することは 可能でしょうか? もし不可とした場合、ほかの言語ならば可能でしょうか?

  • アプレットが見られない。

    他人が公開しているアプレットが見られません。 そのページを開こうとすると、「同一プロセス内で複数のJava仮想マシンが動作したため、エラーになりました」と出て、見られません。一応jdkはインストールしているのですが。。。 使っているブラウザはie7です。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Ni-VISAによるRS232C制御プログラム

    Ni-VISA+VB.NETでRS232C付きの計測器の制御プログラムを作成したいと考えています。 現在まで、USBTMCとGPIB接続での制御プログラム作成経験がありますが、RS232C接続での制御プログラム作成は初めてです。 Ni-MAXで動作確認できていますので計測器とPCはRS232Cで正常に接続できています。 しかしながら、下記プログラムコードでうまく動作しません。 プログラムの修正点などアドバイス頂けないでしょうか? Public Function DcOutput_P4305(DcValue As Double) ' リソースの宣言 Dim RM As New Ivi.Visa.Interop.ResourceManager ' VISA COM リソースマネージャ Dim VCG As New Ivi.Visa.Interop.FormattedIO488 ' VISA COM フォーマッテッドIO ' 通信の開始 VCG.IO = RM.Open("ASRL1::INSTR") ' 処理待機時間を設定 System.Threading.Thread.Sleep(500) ' DC出力値設定(例:VOLT 10 ・・・10V出力) VCG.WriteString("VOLT" & " " & DcValue.ToString() & vbLf) ' 処理待機時間を設定 System.Threading.Thread.Sleep(500) ' 通信の終了処理 VCG.IO.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(VCG) System.Runtime.InteropServices.Marshal.ReleaseComObject(RM) '処理待機時間を設定 System.Threading.Thread.Sleep(500) Return 0 End Function

  • RS232cと通信が可能な、CまたはC++のプログラム

    初めて投稿します。 現在卒業研究で、RS232cで接続された2次元センサ(カメラで対象物をトラッキングし、2次元座標データをPCに送る計測器)のデータをPC(OSはXP)で読み込もうとしています。 以下のサイトを見つけ、 http://7ujm.net/C++/Rs232c.h.html ソースファイルとヘッダーファイルからなるプログラムをつくり(プログラムの変更点は最後に明記しました) 、VC++とBORLANDC++で試してみたのですが VC++ではプロジェクトのビルド時に 「fatal error C1010: プリコンパイル済みのヘッダーの検索中に予期しないEOFを検出しました。」 とエラーが出てしまいます。 _tmain()関数の引数を無記入にしてみてもエラーの内容は変わりません でした。 また、BORLANDC++ではコンパイル時に 「エラー E2268 RS232.cpp 11: 未定義の関数'printf'を呼び出した(関数 tmai())」 「エラー E2268 RS232.cpp 13: 未定義の関数'gethar'を呼び出した(関数 tmai())」 となってしまい、ヘッダーファイルのみをコンパイルしても 「エラー E2141 RS232c.h 10:宣言の構文エラー」 というエラーが生じてしまいます。 念のためこちらも http://okwave.jp/qa733184.html 参考に、BORLANDの設定(bcc32.cfg ファイルの確認など、最初の設定)も確認しましたが、独習Cなどの教本に載っているプログラムでは問題なく動作します。 なお計測機器のボーレートは115200bps、ターミネータはcr(キャリッジリターン)のみで(lf(ラインフィード)が入ってもかまわない)、送信コマンドはASCII文字となっています。 ハイパーターミナル、MATLABのM-fileでの通信は確認済みです。 もしこのような環境でRS232c通信が利用可能なC(またはC++)プログラムをご存知の方がいらっしゃれば、教えていただけないでしょうか? よろしくお願いします。 「ソースファイル」 #include "RS232c.h" //このヘッダーを取り込みます。 int _tmain() { RS232c rs; rs.Connect(); rs.Send("POS#?,,1 CR/LF");//文字列を送信 Send(送信文字列) char w[100]; rs.Read(w,100); //文字列の受信 Read(char配列,読み込む文字数) printf(w); getchar(); return 0; } 「ヘッダーファイル」 #ifndef _RS_232C_H_ #define _RS_232C_H_ #if _MSC_VER > 1000 #pragma once #endif #include <windows.h> <中略> bool RS232c::Connect(char* PortNmae="COM1", int BaudRate = 115200, int ByteSize = 8, int Parity = NOPARITY, int StopBits = ONESTOPBIT, int RTS = RTS_CONTROL_DISABLE, int DTR = DTR_CONTROL_DISABLE, int ReadTimeOut =700, int WriteTimeOut = 700 ) <中略> { RS232c::~RS232c(){ //ポートを閉じます CloseHandle(m_hComm); } #endif // _RS_232C_H_

  • RS-232Cにおける制御についての質問です。

    プラグラミングに対して、全くの初心者のものです。 DelphiでRS-232Cの制御を行おうとしているところですが、どのようにプログミングすればよいのかまったくわかりません。 一応説明書に書かれていることを記します。 (通信ポート設定) Baud Rate 9600,Stop Bit 2,Parity non,Word Length 8,Flow Control XON/XOFF RTS,DTR (通信パケット仕様) ・パケットは全て ヘッダー'#'と、ターミネータ'\r'で区切られる。 ・パケット内の数値データは、全て16進のアスキーコードで表記。 ・機能に応じて以下の4種類のパケットがある。 (1)コマンドパケット (2)リプライパケット (3)イベントパケット (4)データパケット (パケット一覧) (1)Command Packet Format : '#[FID] [P1] [P2] ..[Pn]\r'   項目   型      内容   FID short ファンクションID   Pn long n番目のパラメータ (2)Reply Packet Packet mode 0 Format Normal Reply '#0 [Reply]\r' Data Type: NUM '#0 [Reply] [Data1] [Data] ..[Data n ]\r' Data Type: STR '#0 [Reply] [Strings]\r'   項目   型    内容  Reply short リプライコード            0:正常終了 1:コマンドエラー 2:パラメータ           エラー 3:ビジーエラー 4:通信エラー            10:コマンドに依存したエラー  Data long n番目の数値データ  Strings char* 文字列データ (3)Event Packet Packet mode=1,Format '#1[Event ID][Event Data]\r7' 項目      型     内容 Event ID short イベントの種類 Event Code long イベントの内容 実際のコマンド仕様を記すのでよろしくお願いします。 1.Connect [動作]PCと装置の回線を確立する。 [引数]FID 1 P1 0:イベント出力・・・無効 1: ・・・有効 [戻り値] 0:正常終了 2:パラメーターエラー 3:ビジーエラー 2Set Data Output Interval [動作]データの出力間を設定する。 [引数]FID 7, P1 0:固定,P2 出力間隔 0,10(0xa)~100(0x64)[/10sec],P2=10の時は1秒間隔でデータを出力する,P2=0の時は出力しない。 [戻り値]0:正常終了,2:パラメータエラー 宜しければ、ちょっとした手がかりで構わないので投稿よろしくお願いします。

  • RS232C機器のコントロールの件

    高砂製作所のKX-100という、電下装置を使用しております。 RS232C接続で制御したいのですが、この辺の知識は全くの素人のためどうしたらよいのかわかりません。 取りあえずは、タイマーで停止をかけたいと考えております。 説明書では、COM1ポートを開いて、"A1,OT0"というコマンドを送ると停止できるとのことです。 フリーソフトのタイマーで、時間を指定してプログラムを実行するというものがありましたので、それを使って指定時間に上記の動作を実行するような事を考えておりますが、可能でしょうか? その他何か簡単な方法がございましたら教えていただけると幸甚です。 よろしくお願いします。

  • javaアプレットがmicrosoftVMでは動作しません

    java初心者です。 JDKをインストールしてアプレットを作成しました。 ローカルファイルへのアクセス、印刷、ソケット通信などできるサンプルプログラムで、jarファイルを作って署名をおこないました。 jreがインストールされていると正常に動作しますが、MicrosoftVMしか入っていないとローカルファイルへのアクセス、印刷、ソケット通信すべて動きません。 回答よろしくお願いします

    • ベストアンサー
    • Java
  • JavaアプレットからローカルJarを利用する方法

    クライアントのローカルフォルダに格納されているJarファイルを Javaアプレットから呼び出して使用することは可能でしょうか? クライアントにC:\Applet\lib\app-test.jarの様に、jarファイルが格納されているとして、 Javaアプレットからこのjarを使用しようするには、どのような設定が必要でしょうか? 現在は、NoClassDefFoundErrorになってしまいます。 eclipseで開発するときは、ビルドパスに上記パスを設定するので、問題なく動作します。 また、app-test.jarをC:\Program Files\Java\jre1.5.0_22\lib\extフォルダに格納すれば、 正常に動作します。 CLASSPATHを設定すれば良いのかと思い、C:\Applet\lib\app-test.jarを クライアントの環境変数(CLASSPATH)に登録しましたが、同じエラーが発生します。 C:\Applet\lib\app-test.jarを利用するために必要設定(環境変数、HTMLのobjectタグ、 java.policyなど)があれば教えてください。 以上

    • ベストアンサー
    • Java

専門家に質問してみよう