我正在使用J2ME构建移动应用程序,并且我发现在程序仍在运行时可以访问我写入RecordStore的数据但是在退出并重新启动它之后它会丢失.没有异常被抛出,数据就丢失了.
更新:感谢大家的建议.我在Windows 7上使用NetBeans.我不确定它是否使用我之前安装的WTK版本或其他安装在其他地方的版本.我已经检查了我的WTK文件夹中的Pavel写的文件,但找不到它们.现在我正在测试我的手机和模拟器中的所有其他东西需要持久性的功能,但是能够在模拟器中测试所有内容当然会好得多.
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
}
}
}
}
解决方法:
如果您使用Sun WTK,它会在其“appdb”文件夹中创建一个名为“in.use”的文件:
C:\WTK25\appdb\DefaultColorPhone\in.use
如果以异常方式关闭模拟器(例如,终止进程),它将不会删除它,并且下次运行模拟器时,它将创建用于存储数据的临时文件夹:
C:\WTK25\appdb\temp.DefaultColorPhone1
当以这种方式启动时,它应该在控制台中打印:“使用存储根temp.DefaultColorPhone1运行”.
我修复它,包括在我的“.bat”文件中每行删除“in.use”文件,模拟器运行.但是,一次运行多个仿真器时应该小心.