java - 在 NetBeans 6.0 中创建 javax.microedition.rms.RecordStore 时出错

标签 java netbeans java-me ioexception recordstore

我正在尝试使用 J2ME 编写一个应用程序,该应用程序使用 javax.microedition.rms.RecordStore 来存储持久数据。我正在 Gentoo 上的 NetBeans 6.0 和 J2ME 2.2 中开发这个项目。当我尝试运行该项目时,出现错误,因为显然无法创建记录存储。以下是包含堆栈跟踪的输出示例:

jar:
pre-run:
cldc-run:
Copying 1 file to /home/dzaslavs/ellipsix/programming/cataschedule/dist/nbrun1623864904410254936
Copying 1 file to /home/dzaslavs/ellipsix/programming/cataschedule/dist/nbrun1623864904410254936
Jad URL for OTA execution: http://localhost:8082/servlet/org.netbeans.modules.mobility.project.jam.JAMServlet/home/dzaslavs/ellipsix/programming/cataschedule/dist//CATASchedule.jad
Starting emulator in execution mode
Running with storage root rms
javax.microedition.rms.RecordStoreException: error opening record store file
        at javax.microedition.rms.RecordStore.(RecordStore.java:2150)
        at javax.microedition.rms.RecordStore.openRecordStore(RecordStore.java:208)
        at net.ellipsix.cata.StopRecordStore.(StopRecordStore.java:48)
        at net.ellipsix.cata.CATAMIDlet.getStopList(CATAMIDlet.java:169)
        at net.ellipsix.cata.CATAMIDlet.startMIDlet(CATAMIDlet.java:64)
        at net.ellipsix.cata.CATAMIDlet.startApp(CATAMIDlet.java:449)
        at javax.microedition.midlet.MIDletProxy.startApp(MIDletProxy.java:44)
        at com.sun.midp.midlet.Scheduler.schedule(Scheduler.java:372)
        at com.sun.midp.main.Main.runLocalClass(Main.java:461)
        at com.sun.midp.main.Main.main(Main.java:126)

I've found a link to what I think is the source of RecordStore, where the exception is being thrown: http://jcs.mobile-utopia.com/jcs/78052_RecordStore.java. The relevant line is down near the bottom, basically like this:

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

这表明当 NetBeans 尝试创建记录存储文件时触发了 IOException。但为什么会发生这种情况呢?不幸的是,输出没有说明记录存储创建失败的确切原因。有谁知道可能出了什么问题,或者知道 NetBeans 如何在内部处理 RecordStore 的任何信息?

这是我的代码中触发错误的构造函数(如果相关):

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
    }
}

编辑:...10 小时后没有答案?真的吗?

最佳答案

我跑了

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 (No such file or directory)
[pid 10593] open("/opt/sun-j2me-bin-2.2/bin/./../appdb/rms", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = -1 ENOENT (No such file or directory)
[pid 10593] stat64("/opt/sun-j2me-bin-2.2/bin/./../appdb/rms", 0xbfa475d0) = -1 ENOENT (No such file or directory)
[pid 10593] mkdir("/opt/sun-j2me-bin-2.2/bin/./../appdb/rms", 0777) = -1 EACCES (Permission denied)

手动创建目录/opt/sun-j2me-bin-2.2/appdb/rmschmod将其修改为0777解决了问题。

关于java - 在 NetBeans 6.0 中创建 javax.microedition.rms.RecordStore 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1298018/

相关文章:

php - 在 Windows 和 Linux 上运行单元测试

java - 如何使用 j2me APIBridge 访问移动收件箱、通话记录、照片库?

java - 如何在 netbeans 中的 java fxml 应用程序中编译时删除警告

java - 正则表达式和带有元字符的匹配 URL

java - 像在 Eclipse 中一样,用于 Netbeans 的内置 Web 浏览器

java - 为什么我在 NetBeans 中收到 "Could not find or load main class ..."错误?

java-me - 我如何计算J2me中某种类型的对象

java - 为什么点击 NUM0-9 按钮的 Java 代码不打印出该字符?

java - 将 Java 类转换为 applet

java - 多线程中的单例 - 各种场景