0

私がやろうとしていること

J2MEミッドレットをコーディングしていて、JSR-75を使用してファイルを書き込みたいです。また、JSR-75をサポートしていないデバイスでアプリを実行できるようにしたいと考えています。

私のやり方

これを行う方法を説明しているWebサイトを見つけました(URLを忘れてしまいました。申し訳ありません)。

  • すべての機能を公開するパブリック抽象クラス(「サービス」)を作成します。
  • この抽象クラスを拡張し、すべての機能を実装するパッケージプライベートクラス( "ServiceImplementation")を作成します。
  • 両方を別のパッケージに入れ、Serviceをパッケージのファサードにレンダリングします。

このクラスをインスタンス化するには、抽象クラスの次のメソッドを使用します。

public static Service getInstance() {
    try {
        Class.forName("javax.microedition.io.file.FileConnection");
        Class c = Class.forName("my.package.Service");
        Service service = (Service) (c.newInstance());
        return service;
    } catch (Exception e) {
        return null;
    }
}

何が悪いのか

これは、JSR-75が存在する場合に完全に機能します。問題は、このミッドレットをJSR-75以外のデバイスでも実行したいことです。このコードを実行しようとすると、すべての例外をキャッチしていても、ClassNotFoundException:javax / microedition / io / file/FileConnectionがスローされます。 。

プロジェクト全体の検索を行って、FileConnectionを他の場所ではなくServiceとServiceImplementationで使用していることを確認しました。

誰かが私がこれを行うことになっている方法を知っていますか?

4

2 に答える 2

0

どうやら私はこれを使うことができます:

System.getProperty("microedition.io.file.FileConnection.version");

nullが返される場合、JSR-75はサポートされていません。それ以外のものを返す場合はそうです。

于 2010-03-22T16:40:43.530 に答える
0

特に、サービスと呼ばれる異なるパッケージの2つのクラスでは、何をしているのか少し混乱しています。しかし、特定のJSRがある場合とない場合の両方で、受話器で実行するコードを記述しているときに、この問題が発生しました。

サービスクラスでJSR-75クラスを参照していますか?Serviceクラスをインスタンス化していない場合でも、まだロードされていると思われます。その後、JVMは、存在しないこれらのクラスに遭遇します。

JSR-75クラスへのすべての参照を、Serviceクラスから参照されるクラスに移動します。

于 2010-03-22T22:52:02.077 に答える