2

J2MEを使用してモバイルアプリを構築しています。プログラムの実行中にRecordStoreに書き込んだデータにアクセスできますが、プログラムを終了して再起動すると失われます。例外はスローされず、データは単に失われます。

更新:あなたの提案をみんなに感謝します。Windows 7でNetBeansを使用しています。以前にインストールしたWTKバージョンを使用しているか、別の場所にインストールした別のバージョンを使用しているかわかりません。Pavelが書いたファイルのWTKフォルダーを確認しましたが、見つかりませんでした。今、私は自分の電話とエミュレーターの他のすべてで永続性を必要とする機能をテストしていますが、もちろんエミュレーターですべてをテストできる方がはるかに良いでしょう。

private RecordStore recordStore = null;

public MyMIDlet() {
    readStuff(); // output: nothing found in recordStore :(
    saveStuff();
    readStuff(); // output: stuff
}

private void readStuff() {
    try {
        recordStore = RecordStore.openRecordStore(REC_STORE, true);
        int n = recordStore.getNumRecords();
        String stuff;

        if (n == 0) {
            stuff = "nothing found in recordStore :(";
        }
        else {
            stuff = new String(recordStore.getRecord(1));
        }

        System.out.println(stuff);
    }
    catch (Exception e) {
        System.out.println("Exception occured in readStuff: " + e.getMessage());
    }
    finally {
        if (recordStore != null) {
            try {
                recordStore.closeRecordStore();
            }
            catch (Exception e) {
                // ignore
            }
        }
    }
}

private void saveStuff() {
    try {
        recordStore = RecordStore.openRecordStore(REC_STORE, true);
        int n = recordStore.getNumRecords();
        byte[] stuff = "stuff".getBytes();
        recordStore.addRecord(stuff, 0, stuff.length);
    } catch (Exception e) {
        System.out.println("Exception occured in saveStuff: " + e.getMessage());
    } finally {
        if (recordStore != null) {
            try {
                recordStore.closeRecordStore();
            } catch (Exception e) {
                // ignore
            }
        }
    }
}
4

7 に答える 7

3

Sun WTK を使用すると、「appdb」フォルダに「in.use」という名前のファイルが作成されます。

C:\WTK25\appdb\DefaultColorPhone\in.use

エミュレーターを通常とは異なる方法で閉じた場合 (プロセスを強制終了するなど)、エミュレーターは削除されず、次にエミュレーターを実行したときに、データを保存するための一時フォルダーが作成されます。

C:\WTK25\appdb\temp.DefaultColorPhone1

この方法で開始すると、コンソールに「Running with storage root temp.DefaultColorPhone1」と表示されます。

エミュレータが実行されるたびに「.bat」ファイルに「in.use」ファイルを削除するための行を含めて修正します。ただし、複数のエミュレーターを同時に実行する場合は注意が必要です。

于 2009-11-10T10:24:46.193 に答える
2

この質問はしばらく前からありましたが、エミュレーターで同じ問題に対する答えを探しているときに偶然見つけましたが、私の場合は Java ME 3 SDK を使用しているときでした。私が見つけた解決策がこの問題を解決する可能性もあります。

使用:

emulator -Xdescriptor:/path/to/app.jad

ドキュメントによると、「MIDlet をインストールして実行し、終了後にアンインストールします。」

インストール(およびそのデータ)を永続化するには、次を使用する必要があります。

emulator -Xjam:install=<JAD-file-URL>

JAD ファイルの URL は、Web アドレスにするか、ローカル ファイル システムからインストールする場合は「file:///path/to/app.jad」にすることができます。このインストール コマンドは、アプリケーション ストレージ番号を表示します。これを使用して、エミュレーターを起動し、以前にインストールしたアプリを実行できます。

emulator -Xjam:run=<application-storage-number>

その他のコマンド ライン オプションについては、ドキュメントを参照してください。

于 2012-02-25T00:54:41.043 に答える
2

私自身も同じ問題を経験しましたが、NetBeans などは実行後に展開されたプログラム ファイルを削除することを発見しました。これらのファイルは C:\Documents and Settings\MyUser\javame-sdk\3.0\work\0\appdb フォルダーにあり、Vista/Win7 では異なる可能性があり、パスの番号は現在のエミュレーターを参照していると思います使用しています。とにかく、このフォルダであなたの RecordStore のような名前のものを探してください。たとえば、「00000002_PSC_onfig.db」は、PSConfig という名前のスイート構成レコードストアです。これを例えば「00000002_PSC_onfig.dbのコピー」にコピーしても削除されません。NetBeans がクリーンアップされたら、コピーして元の名前に戻します。次に NetBeans で実行すると、レコードストアが表示されます。痛いよ、

于 2010-04-03T20:38:16.847 に答える
1

私はついにそれを実際の受話器で動作させることができました。Martin Claytonが示唆したように、エミュレータのリセットによってデータが消去されたようです。ただし、エミュレータで永続性を有効にする方法をまだ探しています。

于 2009-11-10T07:37:25.287 に答える
1

Windows Vista を使用している場合は、パーミッションの問題が発生する可能性があり、ほとんどの問題があります。これを解決する方法はわかりませんが、エミュレーターを実行しているユーザーがエミュレーター ストアへの書き込みアクセス権を持っていることを確認してください。

appdb/$phone/*.db 内

于 2009-11-10T08:12:52.090 に答える
1

ストレージの問題を解決するには、netbeans プラットフォーム マネージャで「ストレージ サイズ」オプションを確認する必要があります。プロジェクトのプロパティに入ります。プラットフォームに入ります。エミュレーターを管理します。Sun Java ワイヤレス ツールキットを選択します。ツールと拡張機能に入ります。設定を開く; 保管所; ストレージ サイズ オプション... サイズを設定します。

これは私のために働く

于 2010-10-07T15:04:38.997 に答える
0

Ubuntu Linux で同じ問題が発生し、WTK 2.5.2 と Netbeans 8.0.2 を使用していました。後で、エミュレーターを閉じずにラップトップをシャットダウンしたことが原因であると考えました。また、最初のエミュレータをシャットダウンせずに 2 番目のエミュレータを実行した場合にも発生します。

私の解決策はここのベスト アンサーに基づいています。すべてのエミュレーターをシャットダウンし、次の場所にあるファイルを削除するだけです。

~/j2mewtk/2.5.2/appdb/DefaultColorPhone

于 2015-04-19T16:57:24.120 に答える