よく尋ねられる質問 (FAQ)

Sun JavaTM Wireless Toolkit for CLDC

2007 年 9 月

 

インストール
一般的な質問
エミュレータに関する質問
トラブルシューティングに関する質問

インストール

抽出の段階でインストールが失敗しました。次のようなメッセージが表示されました。

Extracting the installation files...
Error!CRCs do not match!Got e61aebb2, expected f53ddfb0
Failed to extract files.Installation will stop now.

使用している Java アーカイブ (JAR) ユーティリティーに互換性がないようです。インストール中に、Java インタプリタのパスを要求されます。JavaTM Platform, Standard Edition (Java SE SDK), Version 1.5.0 インストールのフルパスを指定する必要があります。

抽出の段階でインストールが失敗しました。次のようなメッセージが表示されました。

...
/usr/java/jre1.5.0_08/bin/jar:No such file or directory
Failed to extract files.Installation will stop now.

JRE が対応していません。Version 1.5.0 の Java Development Kit (JDK) が必要です。完全な JavaTM Platform, Standard Edition (Java SE) をインストールしてください。インストール中に、Java SE インストールのフルパスを指定します。

『リリースノート』では、SNAP Mobile Emulation Environment を Windows プラットフォームにインストールする場合について説明されています。SnapMobileSample MIDlet を Linux で動作させるには、どうすればいいですか。

  1. 『リリースノート』の指示に従って、SNAP Mobile Emulation Environment をネットワーク上の Windows マシンにインストールします。
  2. SNAP サーバーエミュレータを起動します。
  3. SnapMobileSample.jad ファイルにあるプロパティー "SNAP-Mobile-Host" を、SNAP サーバーエミュレータを実行しているマシンの名前に変更します。

Windows 98 SE にインストールできましたが、いくつか問題があります。

Windows 98 SE はサポートされていないプラットフォームです。docs/BinaryReleasNotes.html で説明しているように、サポートされているプラットフォームは Windows XP だけです。

一般的な質問

このツールキットが Java で記述されているなら、なぜほかのプラットフォームで使用できるようになるまでに時間がかかるのですか。

ツールキットのユーザーインタフェースは Java SE で記述されていますが、Java ME 仮想マシンの完全な実装を含め、製品にはたくさんのプラットフォームに固有のネイティブコードが含まれています。プラットフォームごとに、ネイティブコードを移植、テスト、および保守するための作業が必要です。

JDK を更新しました。どうすれば更新した JDK をエミュレータで使用できますか。

エミュレータに別のインストール場所を指定することはできません。新しい JDK は以前の JDK と同じ場所にインストールできます。または、JDK のアンインストール後、新しい JDK のパスを指定して再インストールしてください。

一番手っ取り早く始める方法は何ですか。

KToolbar を使い始める場合は、いくつかのデモプロジェクトを開いて実行してみてください。デモ用のソースコードを確認したり、変更したりすることもできます。詳細は、ここを参照してください。

ツールキットをコマンド行から使用できますか。

はい。詳細は、『ユーザーズガイド』の付録 B を参照してください。

MIDP、CLDC、MMAPI、および WMA に関する詳細は、どこで参照できますか。

詳細は、次のリンクを参照してください。

MIDP 1.0 デバイス用のアプリケーションを作成できますか。

はい。さまざまなソフトウェアスタック用のアプリケーションを作成できます。「属性設定...」ボタンをクリックしてプロジェクト設定を編集してから、「API の選択」タブで任意の設定、プロファイル、およびオプションパッケージを選択してください。

新しいプロジェクトを作成しました。次に何をしたらよいですか。

次の手順は、プロジェクトのソースコードの編集です。KToolbar コンソールのメッセージで、ソースコード、リソースファイル、およびライブラリファイルを格納する場所が通知されます。それでもどうしたらよいかわからない場合は、『ユーザーズガイド』の第 2 章に紹介されている簡単な例を参照してください。

プロジェクトの Java アプリケーション記述子 (JAD) および Java アーカイブ (JAR) ファイルはどこにありますか。

まず、KToolbar メニューから「プロジェクト」->「パッケージ」->「パッケージの作成」を選択して、プロジェクトをパッケージ化する必要があります。MIDlet スイートの記述子と JAR ファイルは、プロジェクトの bin ディレクトリに保存されます。

プロジェクトの作成後に、プロジェクトのディレクトリを変更することはできますか。

wtklib/Windows/ktools.properties を編集して、次のプロパティーを追加します。
kvem.apps.dir = your-new-app-directory

すべてのプロジェクト管理機能については、NetBeans Mobility Pack を参照してください。

難読化ツールを使用できますか。

はい。このツールキットは、ProGuard をサポートしており、あらゆる難読化ツールをサポートするためのアーキテクチャーを備えています。詳細は、『ユーザーズガイド』を参照してください。

デバッガを使用できますか。

はい。IDE では、Sun Java Wireless Toolkit for CLDC をデバッガと組み合わせて使用する可能性が高いです。デバッガの使用方法については、『ユーザーズガイド』を参照してください。

アプリケーションで特定の API だけ、たとえば MIDP 2.0 API だけを確実に使用するには、どうすればよいでしょうか。

「プロジェクトの設定」ダイアログボックスの「API の選択」タブを選択し、使用するターゲットプラットフォームと API を選択します。

Java ME アプリケーションで HTTP と HTTPS 以外のネットワークプロトコルを使用できますか。

はい。MIDP 2.0 仕様により、ソケット、サーバーソケット、データグラム、SSL、およびシリアル (COMM) 通信のオプションサポートが導入されました。WMA 仕様では、SMS、CBS、および MMS メッセージングもサポートされます。ツールキットの JSR 75 および JSR 82 のサポートにより、ファイル、Bluetooth、および OBEX 接続が追加されます。

転送レジストリはどのようにテストしたらよいですか。

着信ネットワーク接続に応答して起動される MIDlet を監視するには、「OTA 経由で実行」機能を使用してアプリケーションを実行する必要があります。「OTA 経由で実行」機能では、デバイスにアプリケーションをインストールするプロセスをシミュレートし、転送レジストリのエントリに基づいて着信ネットワーク接続に正しく応答します。詳細は、『ユーザーズガイド』を参照してください。

Linux 上で実行しているときは、どうすれば Comm ポートにアクセスできますか。

コマンド行で次のアクセス権を設定する必要があります。この場合、ルート権限が必要です。

chmod a+w /dev/ttyS[01]

MIDlet スイートを実際のデバイスに転送するにはどうしたらよいでしょうか。

その方法はデバイスによってまったく異なります。MIDP をサポートする各デバイス製造元が、MIDlet をデバイスに転送するメカニズムを提供しなければなりません。

Wireless Toolkit は、携帯電話などの外部 Bluetooth デバイスに接続できますか。

いいえ。Wireless Toolkit はワイヤレスデバイスと通信できません。

エミュレータに関する質問

エミュレータで、ネットワークに接続できるかどうか尋ねられるのはなぜですか。

アプリケーションが実行されている保護ドメインによっては、エミュレータで、ネットワークアクセスなどの特定の操作に対するアクセス権があるかどうか尋ねられることがあります。MIDP 2.0 のアクセス権と保護ドメインの概要については、『Understanding MIDP 2.0's Security Architecture』を参照してください。

API の選択プロジェクト設定で選択していなくても、API をエミュレータで使用できます。どうなっているのでしょうか。

API の選択プロジェクト設定は、構築したアプリケーションにのみ適用されます。エミュレータは常に利用可能なすべての API をサポートしています。

エミュレータが英語以外の言語のテキストを正しく表示しません。どうすればフォントを変更できますか。

英語以外の言語でテキストを表示するには、次の手順を実行してください。

エミュレータによって表示されるデバイスイメージが小さすぎます。どうすれば大きくできますか。
エミュレータでタッチ画面イベントを有効にするにはどうしたらよいでしょうか。
デバイスで利用可能な文字エンコーディングコンバータを変更するにはどうしたらよいでしょうか。

デフォルトエミュレータの変更については、『基本カスタマイズガイド』を参照してください。

トラブルシューティングに関する質問

実際のデバイスにデモ MIDlet を配備できません。どこが悪いのでしょうか。

一部のデモ MIDlet は、MSA プラットフォーム用にビルドされ、MIDP 2.1 プロファイルを使用しています。デモの .jad および .jar ファイルを確認してください。多くのデバイスでは、この新しいプロファイルをサポートしていません。デバイスの機能に応じてプロジェクトの設定を変更するには、「属性設定...」ボタンをクリックします。「属性設定」ウィンドウの左側で、「API の選択」をクリックします。「API の選択」区画で、MSA 以外のターゲットプラットフォームと、MIDP 2.1 以外のプロファイルを選択します。設定とオプションパッケージを選択します。「了解」をクリックします。

MIDlet がサーバーと通信しません。どこが悪いのでしょうか。

サーバーが正しいバージョンの HTTP と通信しているかどうか確認してください。KToolbar の環境設定でエミュレータが使用するバージョンを調整できます。ネットワークの問題をデバッグする場合は、ネットワークモニターを使用することをお勧めします。詳細は、『ユーザーズガイド』を参照してください。

ファイアウォール内にいるために、接続が失敗する場合があります。「環境設定」->「ネットワーク構成」->「プロキシサーバーを使用」を選択し、プロキシ情報を入力します。

デバイスが署名付きの MIDlet スイートを認識しないのはなぜでしょうか。

実際のネットワーク上の実際のデバイスに、製造元または無線キャリアに固有のルート証明書がインストールされている可能性があります。署名付き MIDlet の詳細は、デバイスの製造元または無線キャリアに問い合わせてください。

信頼できるキーを使用して MIDlet に署名しましたが、デバイスにインストールするときに MIDlet が untrusted に分類されます。どこが悪いのでしょうか。

この問題は、プロジェクトのセキュリティーポリシーが、デバイスで利用可能なセキュリティーポリシーと一致しないときに発生します。エミュレータはセキュリティーポリシーを MSA または JTWI に切り替えることができますが、デバイスは切り替えられません。MSA または JTWI のいずれかを設定でき、両方は設定できません。この問題を回避するには、MIDlet のセキュリティーポリシーをデバイスのセキュリティーポリシーと一致させる必要があります。

たとえば、MIDlet を MSA セキュリティーポリシーを使用して開発しているとします。trustedkey という名前のデフォルトの署名証明書を使用して、MIDlet に署名します。これには、MSA セキュリティーポリシーの「manufacturer」ドメインに属する、対応するルート証明書があります。次に、この MIDlet を、JTWI を実行する実際のデバイスにインストールすることに決定します。エミュレータのセキュリティーポリシーを JTWI に切り替え、OTA 経由でインストールを開始します。エミュレータは、「manufacturer」ドメインで trustedkey のルート証明書を検索します。「manufacturer」は JTWI セキュリティーポリシーに存在しないため、これは問題となり、MIDlet は trusted として認識されません。インストール中に、エミュレータは証明書の内容を表示し、インストールを確認するメッセージを表示します。インストールは成功しますが、MIDlet は untrusted と見なされます。この動作が発生する可能性があるのは、ルート証明書がデバイスのセキュリティーポリシーで認識されていない場合のみです。

MIDlet の実行中にセキュリティーアラートが表示されます。なぜアラートを解消することができないのですか。

commandAction() メソッドから保護 API にアクセスしようとしている (たとえば、接続を開いている) ため、UI スレッドがロックされている可能性があります。別のスレッドから保護 API にアクセスしてください。実例については、NetworkDemo を参照してください。

エミュレータを実行すると、次のようなメッセージが表示されてクラッシュします。どうすれば修正できますか。

  Title:drwtsn32.exe - Unable To Locate Component
  Content:This aplication has failed to start because dbgeng.dll was not found.

  Re-installing the application may fix this problem.

  Error:Can not find soundbank path in registry.

Windows のインストールで、次の 1 つまたは複数のファイルが不足しています。

windows-directory\system32\drivers\gm.dls
windows-directory\system32\drwatson.exe
windows-directory\system32\dbgeng.dll

不足しているファイルを Windows の標準インストールから問題のインストールにコピーして、再起動します。

インターネットに接続するアプリケーションの使用中にエラーコードが表示されます。ツールキットの設定を変更する必要がありますか。

はい。「環境設定」->「ネットワーク構成」->「プロキシサーバーを使用」を選択して、プロキシ情報を指定します。

JSR172Demo は sunwireless.quimbik.com を呼び出しますが、サーバーが応答しません。別のサーバーを使用できますか。

はい。JSR172Demo は http://cds.cmsg.sun.com:80/serverscript/serverscript を使用します。

事前検証の実行中に、「Error loading class...」というメッセージが表示されるのはなぜですか。

まず、Java ソースとライブラリが、CLDC および MIDP API で使用可能であることを確認します。

次に、Sun Java Wireless Toolkit for CLDC のインストール先のディレクトリについて、パスにスペースが含まれていないことを確認します。たとえば、このツールキットは、パス C:\Program Files\WTK25 では動作しません。

パスにスペースが含まれるディレクトリにツールキットをインストールした場合は、ツールキットをアンインストールして、パス名にスペースを含まないディレクトリに再インストールする必要があります。

外部ライブラリを使用したいのですが、外部ライブラリを使用する MIDlet スイートをビルドしようとすると、「Error preverifying class...」というメッセージが表示されます。これはなぜですか。

このメッセージが表示される場合は、Java 2 Platform Standard Edition (J2SETM プラットフォーム) 用に記述されたクラスライブラリを使用していることが考えられます。このツールキットは MIDP アプリケーションの開発をサポートしていますが、それらのアプリケーションの J2SE 版に比べると機能が限られています。

サードパーティー製のライブラリを使用するアプリケーションを作成しました。コンパイルや事前検証では問題がありませんでしたが、次のエラーメッセージが表示されます。どうすれば修正できますか。
Uncaught exception java/lang/NoClassDefFoundError:java/awt/Frame:Cannot create class in system package.

サードパーティー製のライブラリを使用するには、「プロジェクト」->「属性設定」->「外部 API」を選択して、『ユーザーズガイド』を参照してください。セキュリティーの制限により、システムパッケージ (たとえば、javajavax.、com.sun.) にクラスは作成できません。

SMS メッセージを送信するアプリケーションを作成しましたが、「サポートされていない形式」により失敗します。

MessageConnection.TEXT_MESSAGE を渡して、次のようなペイロードを追加します。

smsconn = (MessageConnection)Connector.open(address);

TextMessage txtmessage = (TextMessage)smsconn.newMessage(
MessageConnection.TEXT_MESSAGE);
txtmessage.setAddress(address);
txtmessage.setPayloadText(messageBox.getString());
smsconn.send(txtmessage);

完全なコード例については、SMSDemo の例を参照してください。

ほかに質問があるのですが、この FAQ に回答が見当たりません。

開発者向けフォーラム (developer forum) で質問するか、developer.sun.com からご意見をお送りください。