Java MEアプリケーションはエミュレータで正常に実行されますが、N70に展開するとクラッシュします。クラッシュする理由を特定する方法はありますか?
質問
CLDCプラットフォーム用のJava MEアプリケーションを開発しました。エミュレータで実行されたときに正常に動作します。しかし、N70電話に展開すると、アプリケーションは電話でまったく起動しません。私のアプリケーションには約14のクラスがあり、それぞれのインスタンスを作成し、アプリケーションの開始時にベクトルに入れています。クラスには、1つの変数と2つの方法のみがあります。この多くのインスタンスの作成がクラッシュする理由になることができますか?
アプリケーションが電話で開始できない理由を見つける方法はありますか?
更新:エミュレータで正常に実行されます。そして、もう1つ言及したいのは、コードがこれらの14インスタンスを作成し、ベクトルに追加するポイントでのみ実行を停止することです。その時点まで、コードは正常に実行されます。
解決
それらのインスタンスを作成するコードのどこに依存する可能性があります。ミッドレットコンストラクターまたはstartAppメソッドでそれらを作成している場合は、初期化をアプリケーションの実行方法に移動してみてください。
電話で起動しないJ2MEアプリケーションをデバッグする1つの方法は、レコードストアシステムに記述されるコードに「printf」スタイルのデバッグメッセージを追加し、アプリケーションに別のミッドレットを追加してRMSから読み取り、それらのメッセージを表示することです。または、コードをコメントして、それが機能するかどうかを確認することもできます。
他のヒント
デバイスでデバッグできます。使用しているエミュレータがNokia SDKの一部である場合、デバイス上のテストとデバッグを実行するための施設が他の場所にあるはずです。 (これについては詳細を投稿しましたが、最近Sony Ericssonの電話でしかこれを行っていません。)
別のオプションは、を使用することです ノキアツール これにより、アプリケーションがデバイスで実行されているときに標準の出力とエラーを表示できます(たとえばBluetooth経由)。
アプリケーションが実際にJava仮想マシンバイテコードインタープリタースレッドをクラッシュさせ、ネイティブプロセス全体を終了する可能性は非常に少ないです。
それは以前に起こったことがありますが、実際のクラッシュを確信する前に、他のいくつかの潜在的な問題を排除する必要があります。
どちらも可能性が高くなります。
- MIDPランタイムが正しくないと判断したため、ミッドレットは作成されておらず、起動しません。
また - ミッドレットは、キャッチしない例外をスローするだけで、残酷に終了したように見えることがあります。
ミッドレットインストーラーは、悪いミッドレットのインストールを妨げることになっているため、猛かけられていない例外の問題はより可能性が高くなります。
無作法な例外を見つける方法:
- aを使用して、最も単純なHelloworldミッドレットから始めます
Form
そのため、簡単に挿入できますStringItem
画面の上部にs。 - 新しいものを作成して開始します
Thread
のMIDlet.startApp()
- あなたのオーバーライドで
Thread.run()
, 、aを追加しますtry{}catch(Throwable){}
ブロック。 - そのブロック内で、元のミッドレットがしたことは何でもします。
- フォームをデバッグに標準出力として使用します。
フォームロギングを使用して、無限のループを入力しないことを確認し、例外クラスとメッセージを表示し、論理的なマイルストーンにフラグを立て、変数値を表示できます...
それが何が起こっているのかを理解するための最初のステップです。
また、同様の問題に直面し、ミッドレットをミッドレット1.0として再コンパイルしたとき、それは正常に機能しました。 N70はMidletの新しいバージョンを実行できないようです。ミッドレットをダウングレードして再テストすると思います。
よろしく
ジュネイド