2009-08-19 4 views
2

Ich versuche, eine Anwendung mit J2ME zu schreiben, die javax.microedition.rms.RecordStore verwendet, um persistente Daten zu speichern. Ich entwickle dieses Projekt in NetBeans 6.0 und J2ME 2.2 auf Gentoo. Wenn ich versuche, das Projekt auszuführen, erhalte ich einen Fehler, weil der Plattenspeicher anscheinend nicht erstellt werden kann. Hier ist ein Beispiel der Ausgabe einschließlich der Stack-Trace:Fehler beim Erstellen von javax.microedition.rms.RecordStore in NetBeans 6.0

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) 

Ich habe einen Link zu dem, was ich fand denken ist die Quelle RecordStore, wo die Ausnahme ausgelöst wird: http://jcs.mobile-utopia.com/jcs/78052_RecordStore.java. Die entsprechende Zeile ist am unteren Rand nach unten, im Grunde wie folgt:

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

so dass deutet darauf hin, dass es eine IOException ausgelöst, wenn NetBeans versucht, den Plattenladen-Datei zu erstellen. Aber warum sollte das passieren? In der Ausgabe wird leider nicht genau angegeben, warum die Erstellung des Datensatzspeichers fehlschlägt. Weiß jemand, was möglicherweise falsch läuft, oder irgendetwas darüber, wie NetBeans intern RecordStore behandelt?

Hier ist der Konstruktor von meinem Code, in dem der Fehler ausgelöst wird, wenn es relevant ist:

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

EDIT: ... keine Antworten nach 10 Stunden? "Ja wirklich?"

Antwort

3

Ich lief

strace netbeans-6.0
und beobachtete nach Dateinamen in der Ausgabe um die Zeit angezeigt, wenn die Anwendung einen Fehler warf.

[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)

das Verzeichnis manuell /opt/sun-j2me-bin-2.2/appdb/rms und chmod ding es 0777 löste das Problem zu schaffen.