我正在尝试使用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)
我找到了一个链接,指向认为是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如何在内部处理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小时后没有答案?真的?
答案 0 :(得分: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 (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/rms
和chmod
将其解析为0777解决了这个问题。