【问题标题】:Error creating javax.microedition.rms.RecordStore in NetBeans 6.0在 NetBeans 6.0 中创建 javax.microedition.rms.RecordStore 时出错
【发布时间】:2009-08-19 06:01:35
【问题描述】:

我正在尝试使用 J2ME 编写一个使用 javax.microedition.rms.RecordStore 来存储持久数据的应用程序。我正在 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)

我找到了一个链接,指向我认为RecordStore 的来源,其中抛出了异常:http://jcs.mobile-utopia.com/jcs/78052_RecordStore.java。相关线在底部附近,基本上是这样的:

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

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

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

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 小时后没有答案?真的吗?

【问题讨论】:

    标签: java netbeans java-me ioexception recordstore


    【解决方案1】:

    我跑了

    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/rmschmodding到0777解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2019-05-30
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      相关资源
      最近更新 更多