Ошибка создания javax.microedition.rms.RecordStore в NetBeans 6.0
Я пытаюсь написать приложение с J2ME, которое использует javax.microedition.rms.RecordStore
хранить постоянные данные. Я занимаюсь разработкой этого проекта в NetBeans 6.0 и J2ME 2.2 в Gentoo. Когда я пытаюсь запустить проект, я получаю сообщение об ошибке, поскольку очевидно, что хранилище записей не может быть создано. Вот пример вывода, включая трассировку стека:
баночка: до запуска: CLDC-запуска: Копирование 1 файла в /home/dzaslavs/ellipsix/ для программирования /cataschedule/dist/nbrun1623864904410254936 Копирование 1 файла в /home/dzaslavs/ellipsix/ для программирования /cataschedule/dist/nbrun1623864904410254936 Jad URL для выполнения OTA: http://localhost:8082/servlet/org.netbeans.modules.mobility.project.jam.JAMServlet/home/dzaslavs/ellipsix/ software /cataschedule/dist//CATASchedule.jad Запуск эмулятора в режиме исполнения Запуск с хранилищем root 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 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 часов? В самом деле?
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/rms
а также chmod
Динг до 0777 решил проблему.