2

CLDCプラットフォーム用のJavaMEアプリケーションを開発しました。エミュレータで実行すると正常に動作します。しかし、それをN70電話に展開すると、電話でアプリケーションがまったく起動しません。私のアプリケーションには約14のクラスがあり、それぞれのインスタンスを作成して、アプリケーションの開始時にベクターに配置しています。クラスには、1つの変数と2つのメソッドがあります。この多くのインスタンスの作成がクラッシュの理由になる可能性がありますか?

アプリケーションが電話で起動できない理由を見つける方法はありますか?

更新:エミュレーターで正常に実行されています。そして、もう1つ言及したいのは、コードは、これらの14個のインスタンスを作成してベクターに追加した時点でのみ実行を停止するということです。その時点まで、コードは正常に実行されます。

4

4 に答える 4

3

これらのインスタンスを作成しているコードの場所によって異なる場合があります。MIDletコンストラクターまたはstartAppメソッドで作成する場合は、初期化をアプリケーションのrunメソッドに移動してみてください。

電話で起動しないJ2MEアプリケーションをデバッグする1つの方法は、レコードストアシステムに書き込まれるコードに「printf」スタイルのデバッグメッセージを追加し、RMSから読み取ってそれらのメッセージを表示する別のMIDletをアプ​​リケーションに追加することです。または、コードの一部にコメントを付けて、それが機能するかどうかを確認することもできます。

于 2010-05-05T20:11:36.050 に答える
2

アプリケーションが実際にJava仮想マシンのバイトコードインタープリタースレッドをクラッシュさせ、ネイティブプロセス全体を終了させる可能性は非常に低いです。

これは以前に発生したことがありますが、実際のクラッシュを確信する前に、他のいくつかの潜在的な問題を排除する必要があります。

次のいずれかである可能性が高くなります。

  • MIDPランタイムが正しくないと判断したため、MIDletが作成されていないか、開始されていません。
    また
  • MIDletは、キャッチしない例外をスローするだけです。これにより、MIDletが残酷に終了したように見える可能性があります。

MIDletインストーラーは、不正なMIDletのインストールを防止することになっているため、キャッチされない例外の問題が発生する可能性が高くなります。

キャッチされない例外を見つける方法:

  • 画面の上部にFormさらにsを簡単に挿入できるように、を使用して、最も単純なHelloWorldMIDletから始めます。StringItem
  • Threadで新しいものを作成して開始しますMIDlet.startApp()
  • のオーバーライドでThread.run()try{}catch(Throwable){}ブロックを追加します。
  • そのブロック内で、元のMIDletが行ったことをすべて実行します。
  • フォームをデバッグの標準出力として使用します。

フォームロギングを使用して、無限ループに入らないようにしたり、例外クラスとメッセージを表示したり、論理マイルストーンにフラグを立てたり、変数値を表示したりできます。

これが、何が起こっているのかを理解するための最初のステップです。

于 2010-05-06T13:28:16.873 に答える
2

デバイスでデバッグできます。使用しているエミュレーターがNokiaSDKの一部である場合は、デバイス上でのテストとデバッグを実行するための機能が他の場所にあるはずです。(これについてはもっと詳しく投稿しますが、最近ソニーエリクソンの電話でのみこれを行いました。)

もう1つのオプションは、アプリケーションがデバイスで実行されているときに(Bluetoothなどを介して)アプリケーションの標準出力とエラーを表示できるNokiaツールを使用することです。

于 2010-05-05T20:31:08.280 に答える
0

私も同様の問題に直面し、MIDLETをMidlet 1.0として再コンパイルすると、正常に機能しました。N70は新しいバージョンのMIDLETを実行できないようです。ミッドレットをダウングレードして再テストすると思います。

よろしく

ジュナイド

于 2010-05-12T06:41:00.577 に答える