Javaでシリアル通信を行い、着信番号を取得する方法とエラーの原因

このQ&Aのポイント
  • Javaにてシリアル通信を行い、着信番号を取得する方法とエラーの原因について説明します。
  • 質問者は電話の着信番号を受信し、それに該当する会員情報をWEB画面に表示したいと考えています。
  • また、質問者はJavaのRXTXライブラリを使用してシリアル通信を行おうとしていますが、エラーが発生してしまっています。エラーの原因についても解説します。
回答を見る
  • ベストアンサー

Javaにてシリアル通信を行っております。

やりたいことは、 電話がかかってきた際にアロハPC1(ナンバーディスプレイ)から 着信番号を受信して、 番号に該当する会員情報(DBから)をWEB画面に表示したいのです。 SerialDebugというソフトを使って、情報は取得できていると思います。 下記のような感じでいろいろ出てきます。 [TEXT] こ0ア3アイアイク090ア6ア5クキ00 [CHAR] _sp _sp 0 _sp 3 _sp _sp 0 _sp _sp 0 9 0 _sp 5 _sp 9 _sp _sp 5 5 _sp _sp _sp _sp _sp _sp _sp _sp _sp _sp [DEC] 130 177 48 177 51 177 178 48 178 184 48 57 48 177 53 57 57 184 183 53 53 160 160 160 160 160 160 160 160 160 3 [HEX] 82 B1 30 B1 33 B1 B2 30 B2 B8 30 39 30 B1 35 B1 39 B8 B7 35 35 A0 A0 A0 A0 A0 A0 A0 A0 A0 03 この時点で、このわけの分からないデータ(信号?)をどうすれば着信番号になるのかさっぱりです。 [HEX]の " 30 39 30 B1 35 B1 39 B8 B7 35 35 " から 09015198755 というテストに使っている携帯番号が取れるのが分かります。 (ここに書いてある番号は適当です。) とりあえず、このデータはどういう風に解析して正確な着信番号にすればいいのでしょうか? また、これをJavaのRXTXライブラリを使用して取得したいと考えていて、 下記、サンプルソースを真似して実行してみました。 http://www.javainthebox.net/JavaForFA/08-09CommAPI/No.08/samples/samples.zip の中の./src/DumbTerminal.java すると、イベント処理ルーチンのデータの読み込みのときにエラーが発生してしまいます。 java.io.IOException: Underlying input stream returned zero bytes at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at SerialTest.serialEvent(SerialTest.java:67) at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732) at gnu.io.RXTXPort.eventLoop(Native Method) at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575) こんな感じです。 これは何が原因なのでしょうか? 少ない情報で申し訳ありませんが、 よろしくお願いいたします。

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • thamansa
  • ベストアンサー率40% (95/232)
回答No.1

" 30 39 30 B1 35 B1 39 B8 B7 35 35 " のうち、 30 31 32 … 39 は、そのままで0~9を表す文字コードですね。 でも B1 や B8 B7 を、31、38、37に変換しないといけないので、 マスクという小技を使います。 Javaの基本的なことは分かっているとして、上記の 16進のデータから電話番号を取り出す部分はこうなります。  public static void main(String[] args) {   // 16進で" 30 39 30 B1 35 B1 39 B8 B7 35 35 " のデータ   int[] data = {0x30, 0x39, 0x30, 0xB1, 0x35, 0xB1, 0x39, 0xB8, 0xB7, 0x35, 0x35};      StringBuilder sb = new StringBuilder();   for (int x : data) {    char c = (char) (x & 0x3F); // 3Fでマスクする    sb.append(c);   }   String phoneNumber = sb.toString(); // "09015998755" になる   System.out.println(phoneNumber);  }

kensuke734
質問者

お礼

どうもありがとうございました。 大変参考になりました。

関連するQ&A

  • 「javaに関して」エラーが解決できません。java.io.IOException: Bad file descriptor

    インターネットを通して、たくさんのファイルを保存した場合、下記のようなエラーが出ます。 何か、解決手段はないでしょうか? ネットや本をいろいろ見たのですがまったくわかりませんでした。わかる方、ぜひとも、よろしくお願いいたします。 また、こういったエラーが出た場合、自分の力で解く方法を教えていただければ幸いです。 ーーーーエラーーーーーー java.io.IOException: Bad file descriptor at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(Unknown Source) at sun.nio.cs.StreamDecoder$ConverterSD.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at test.main(test.java:14) Exception in thread "main"

    • ベストアンサー
    • Java
  • javaでRMI関係の質問です。

    クライアントアプリケーションからサーバAPIを使う際に以下のエラーがでます。 eclipse+javaで開発中です。 Exception in thread "main" java.lang.NoClassDefFoundError: gnu/trove/THashSet at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Unknown Source) at java.lang.Class.getDeclaredField(Unknown Source) at java.io.ObjectStreamClass.getDeclaredSUID(Unknown Source) at java.io.ObjectStreamClass.access$700(Unknown Source) at java.io.ObjectStreamClass$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.io.ObjectStreamClass.<init>(Unknown Source) at java.io.ObjectStreamClass.lookup(Unknown Source) at java.io.ObjectStreamClass.initNonProxy(Unknown Source) at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) at java.io.ObjectInputStream.readClassDesc(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) at java.rmi.Naming.lookup(Unknown Source) at se.pricer.apidemo.APIDemo.<init>(APIDemo.java:26) at se.pricer.apidemo.APIDemo.main(APIDemo.java:83) Caused by: java.lang.ClassNotFoundException: gnu.trove.THashSet at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at sun.misc.Launcher$ExtClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) ... 19 more 通信のURLは合っています。 「gnu/trove/THashSet」のエラーの意味を教えて下さい。 レジストリーのバインドがうまく出来ていないと思われます。 サーバのモジュールも実行構成ー>引数タブー>VM引数でcodebasの指定方法もいまいちわかりません。 初投稿なので変な質問ですが誰か力を貸して下さい。

    • ベストアンサー
    • Java
  • System.inをClose()すると例外が発生する。

    こんにちは、tokopokoといいます。 ■次のプログラムを実行すると、エラーになります。 なぜエラーになるのか、ご存知の方はいらっしゃいませんか。 import java.io.*; class TestInput { public static void main(String[] args) { System.out.println("first = \"" + getInputValue("first?") + "\""); System.out.println("second = \"" + getInputValue("second?") + "\""); } public static String getInputValue(String message) { String returnString = ""; System.out.print(message); BufferedReader input = null; try { input = new BufferedReader(new InputStreamReader(System.in)); returnString = input.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } return returnString; } } ■実行例 D:\>javac TestInput.java D:\>java TestInput first?100 first = "100" second?java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145 ) at java.io.BufferedInputStream.read(BufferedInputStream.java:308) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at TestInput.getInputValue(TestInput.java:14) at TestInput.main(TestInput.java:5) second = "" ■私の環境は以下の通りです。 OS: Microsoft Windows XP Professional SP2 java: java version "1.6.0_03"

    • ベストアンサー
    • Java
  • eclipse起動時のエラー

    こんにちは。 初めて投稿させて頂きます。 マナー違反等ございましたら失礼致します。 eclipseを使用し、androidアプリの開発を行っております。 本日、eclipseを起動しようとしたところエラーとなり起動できなくなってしまいました。 eclipseからエラーログを確認しろとダイアログが表示されましたので 確認したところ以下のログ内容が記載されておりました。 ●ログ内容 !SESSION 2012-11-27 12:08:42.127 ----------------------------------------------- eclipse.buildId=M20110210-1200 java.version=1.7.0_05 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=ja_JP Framework arguments: -product org.eclipse.epp.package.jee.product Command-line arguments: -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.jee.product -clean !ENTRY org.eclipse.core.resources 2 10035 2012-11-27 12:09:20.965 !MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. !ENTRY org.eclipse.osgi 4 0 2012-11-27 12:10:02.024 !MESSAGE アプリケーション・エラー !STACK 1 java.lang.StackOverflowError at sun.nio.cs.ext.DoubleByte$Decoder.decodeArrayLoop(Unknown Source) at sun.nio.cs.ext.DoubleByte$Decoder.decodeLoop(Unknown Source) at java.nio.charset.CharsetDecoder.decode(Unknown Source) at java.lang.StringCoding$StringDecoder.decode(Unknown Source) at java.lang.StringCoding.decode(Unknown Source) at java.lang.String.<init>(Unknown Source) at java.lang.String.<init>(Unknown Source) at java.io.FileOutputStream.writeBytes(Native Method) at java.io.FileOutputStream.write(Unknown Source) at java.io.BufferedOutputStream.flushBuffer(Unknown Source) at java.io.BufferedOutputStream.write(Unknown Source) at java.io.PrintStream.write(Unknown Source) at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source) at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source) at sun.nio.cs.StreamEncoder.flushBuffer(Unknown Source) at java.io.OutputStreamWriter.flushBuffer(Unknown Source) at java.io.PrintStream.write(Unknown Source) at java.io.PrintStream.print(Unknown Source) at java.io.PrintStream.println(Unknown Source) at java.beans.Statement$1.exceptionThrown(Unknown Source) at com.sun.beans.decoder.DocumentHandler.handleException(Unknown Source) at com.sun.beans.decoder.DocumentHandler.parse(Unknown Source) at java.beans.XMLDecoder.parsingComplete(Unknown Source) at java.beans.XMLDecoder.readObject(Unknown Source) at zigen.plugin.db.core.XMLManager.load(XMLManager.java:39) at zigen.plugin.db.core.XMLManager.load(XMLManager.java:51) at zigen.plugin.db.core.XMLManager.load(XMLManager.java:57) at zigen.plugin.db.core.XMLManager.load(XMLManager.java:57)     ↑以降、約1000行にわたり記載あり google等でエラー内容を調べてみたのですが、主たるエラーと思われる 「java.lang.StackOverflowError」が原因でeclipseが起動できないという内容が あまり見受けられず、解決するに正直困っております。 是非皆様のお知恵をお借りしたく、宜しくお願い致します。 ●環境 OS:Windows7 eclipse:3.6 Helios JDK:1.7 JRE:1.7 CPU:Core i3 HDD:120GB MEMEORY:2GB

  • BufferedReaderでのエラー

    Javaプログラムを作成しています. 標準入力で入力された文字列を表示し,exitが入力されるまで繰り返すプログラムです. エラーが出ますが,対策方法がわかりません. ソースコード,実行結果,エラーは以下の通りです. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test { /** * @param args */ public static void main(String[] args) { System.out.println("Program starts."); while (true) { String input = null; input = getInputLine(); System.out.println("echo:" + input); if (input.equals("exit")) { break; } } System.out.println("Program exits."); } private static String getInputLine() { String input = null; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); input = br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace(); } } return input; } } Program starts. test echo:test echo:null java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145) at java.io.BufferedInputStream.read(BufferedInputStream.java:308) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at kadai1.Test.getInputLine(Test.java:34) at kadai1.Test.main(Test.java:18) Exception in thread "main" java.lang.NullPointerException at kadai1.Test.main(Test.java:21)

    • ベストアンサー
    • Java
  • Javaでのエラーについて

    Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '.' at java.util.Formatter.checkText(Unknown Source) at java.util.Formatter.parse(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.io.PrintStream.format(Unknown Source) at java.io.PrintStream.printf(Unknown Source) at ShininginSpace.main(ShininginSpace.java:33) と出てきたのですが、これはどういう意味ですか?

    • ベストアンサー
    • Java
  • Java 起動しません

    「アプリケーションの起動に失敗しました」詳細をクリック すると下記のような表示がJavaコンソールにでます。IEのオプション 「詳細設定」にJavaが現れません。対応を教えて頂ければ幸です。 記 Java Plug-in 1.6.0_17 使用中の JRE のバージョン 1.6.0_17-b04 Java HotSpot(TM) Client VM ユーザのホームディレクトリ = C:\Users\igarashi ---------------------------------------------------- c: コンソールウィンドウをクリア f: ファイナライズキューのオブジェクトをファイナライズ g: ガベージコレクト h: このヘルプメッセージを表示 l: クラスローダリストをダンプ m: メモリ使用率を表示 o: トリガログ q: コンソールを非表示 r: ポリシー設定を再ロード s: システムプロパティと配備プロパティをダンプ t: スレッドリストをダンプ v: スレッドスタックをダンプ x: クラスローダキャッシュをクリア 0-5: トレースレベルを <n> に設定 ---------------------------------------------------- load: クラス jreCheck.class が見つかりません。 java.lang.ClassNotFoundException: jreCheck.class at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source) at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.<init>(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.net.HttpURLConnection.getResponseCode(Unknown Source) at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source) at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source) at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) ... 7 more 例外: java.lang.ClassNotFoundException: jreCheck.class

  • Java コンソールが起動しない

    Java コンソールが起動しない アプリケーションの起動に失敗しましたとでる。 明細 Java Plug-in 1.6.0_22 使用中の JRE のバージョン 1.6.0_22-b04 Java HotSpot(TM) Client VM ユーザのホームディレクトリ = C:\Documents and Settings\Owner ---------------------------------------------------- c: コンソールウィンドウをクリア f: ファイナライズキューのオブジェクトをファイナライズ g: ガベージコレクト h: このヘルプメッセージを表示 l: クラスローダリストをダンプ m: メモリ使用率を表示 o: トリガログ q: コンソールを非表示 r: ポリシー設定を再ロード s: システムプロパティと配備プロパティをダンプ t: スレッドリストをダンプ v: スレッドスタックをダンプ x: クラスローダキャッシュをクリア 0-5: トレースレベルを <n> に設定 ---------------------------------------------------- load: クラス LiveApplet.class が見つかりません。 java.lang.ClassNotFoundException: LiveApplet.class at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source) at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.<init>(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown So

    • ベストアンサー
    • Java
  • アプレットをhtmlに乗せると動かなくなります…

    こんにちは。わざわざ見て下さっている方ありがとうございます! 作ったアプレットがアプレットビューアの上でなら動くのに、htmlに乗せると「読み込みに失敗しました」になってしまいます。 私は本当に初心者でして、何をお伝えすればいいのか分からないのですが、htmlのアプレットを右クリックした時に出てくる[Javaコンソール]というものが限りなく怪しいかなと思いましたので、下にペーストしておきました。関係なかったらすみません。 Class: class ThreeDMaze ClassLoader: sun.plugin.security.PluginClassLoader@10dd1f7 java.security.AccessControlException: access denied (java.io.FilePermission .\mapFile read) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkRead(Unknown Source) at java.io.File.list(Unknown Source) at ThreeDMaze.init(ThreeDMaze.java:70) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source) どうか宜しくお願いします!

    • ベストアンサー
    • Java
  • javaのエラーについて

    javaを使って、ファイルの場所が書いてある、テキストファイルからファイルを読み取って解析するコードを書いたのですが、何行か作業をすると、エラーがでます。 ファイル名に半角カナや顔文字の類が入っているためエラーが起こっていると思います。 ただ、残念ながら、ファイル名を変更することができないため、読めるファイルだけでも読みたいのですが、下記のエラーがでて前に進めません。なんとか、エラーをスキップして作業を進めたいのですが、よい方法はないでしょうか?よろしくお願いいたします。 エラーメッセージ Exception in thread "main"java.io.FileNotFoundException :c:\ファイル名.txt( ファイル名、ディレクトリ名、またはボリューjム ラベルの構文が間違っています。) at java.io.FileInputSteam.open(Nativa Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at Test.main(Test.java:17) 17行目と18行目のコードです InputStream is = new FileInputStream(link); BufferedReader br = new BufferedReader(new InputStreamReader(is, "JISAutoDetect")); linkというところに、C:\ファイル名.txtを読み込ませています。しかしながら、多分、この「ファイル名」が半角やら、顔文字やらでうまく読み込めていないと思います。

    • ベストアンサー
    • Java

専門家に質問してみよう