2

javax.microedition.rms.RecordStore永続データの保存に使用する J2ME でアプリケーションを作成しようとしています。Gentoo の NetBeans 6.0 および J2ME 2.2 でこのプロジェクトを開発しています。プロジェクトを実行しようとすると、明らかにレコード ストアを作成できないため、エラーが発生します。スタック トレースを含む出力のサンプルを次に示します。

瓶:
実行前:
cldc 実行:
1 つのファイルを /home/dzaslavs/ellipsix/programming/cataschedule/dist/nbrun1623864904410254936 にコピーしています
1 つのファイルを /home/dzaslavs/ellipsix/programming/cataschedule/dist/nbrun1623864904410254936 にコピーしています
OTA 実行用の Jad URL: http://localhost:8082/servlet/org.netbeans.modules.mobility.project.jam.JAMServlet/home/dzaslavs/ellipsix/programming/cataschedule/dist//CATASchedule.jad
エミュレータを実行モードで起動
ストレージ ルート rms での実行
javax.microedition.rms.RecordStoreException: レコード ストア ファイルを開く際のエラー
        javax.microedition.rms.RecordStore.(RecordStore.java:2150)
        javax.microedition.rms.RecordStore.openRecordStore(RecordStore.java:208)で
        net.ellipsix.cata.StopRecordStore.(StopRecordStore.java:48) で
        net.ellipsix.cata.CATAMIDlet.getStopList (CATAMIDlet.java:169) で
        net.ellipsix.cata.CATAMIDlet.startMIDlet (CATAMIDlet.java:64) で
        net.ellipsix.cata.CATAMIDlet.startApp (CATAMIDlet.java:449) で
        javax.microedition.midlet.MIDletProxy.startApp(MIDletProxy.java:44) で
        com.sun.midp.midlet.Scheduler.schedule(Scheduler.java:372) で
        com.sun.midp.main.Main.runLocalClass (Main.java:461) で
        com.sun.midp.main.Main.main(Main.java:126) で

例外がスローされているのソースと思われるものへのリンクを見つけました: http://jcs.mobile-utopia.com/jcs/78052_RecordStore.java。関連する行は、基本的に次のように、下部近くにあります。RecordStore

try {
    ...
}
catch (java.io.IOException ioe) {
    ...
    throw new RecordStoreException("error opening record store " + 
                                       "file");
}

これは、NetBeans がレコード ストア ファイルを作成しようとしたときに IOException がトリガーされたことを示しています。しかし、なぜそれが起こるのでしょうか?残念ながら、出力には、レコード ストアの作成が失敗した正確な理由が示されていません。何がうまくいかないのか、または NetBeans がRecordStore内部で s を処理する方法について誰か知っていますか?

関連する場合、エラーがトリガーされる私のコードのコンストラクターは次のとおりです。

public StopRecordStore() throws RecordStoreException {
    this.store = RecordStore.openRecordStore("freqstops", true);
    if (store.getNumRecords() == 0) {
        try {
            byte[] collegeAllen = new StopRecord((short)1, "College & Allen").toBytes();
            store.addRecord(collegeAllen, 0, collegeAllen.length);
        }
        catch(IOException ioe) {
            ioe.printStackTrace();
        } // do nothing
    }
}

EDIT : ...10時間経っても返事がない?本当に?

4

1 に答える 1

3

走った

strace netbeans-6.0
アプリケーションがエラーをスローした前後の出力に表示されるファイル名を監視しました。

[pid 10593] stat64("/opt/sun-j2me-bin-2.2/bin/./../appdb/rms/run_by_class_storage_freqstops.db", 0xbfa475c0) = -1 ENOENT (そのようなファイルまたはディレクトリはありません)
[pid 10593] open("/opt/sun-j2me-bin-2.2/bin/./../appdb/rms", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = -1 ENOENT (そのようなファイルまたはディレクトリはありません) )
[pid 10593] stat64("/opt/sun-j2me-bin-2.2/bin/./../appdb/rms", 0xbfa475d0) = -1 ENOENT (そのようなファイルまたはディレクトリはありません)
[pid 10593] mkdir("/opt/sun-j2me-bin-2.2/bin/./../appdb/rms", 0777) = -1 EACCES (許可が拒否されました)

/opt/sun-j2me-bin-2.2/appdb/rmsディレクトリを手動で作成し、chmodそれを 0777 に変更すると、問題は解決しました。

于 2009-08-20T03:37:15.267 に答える