在侦听文件更改时,在BlackBerry中使用设备时延迟持久性

时间:2012-06-25 03:49:05

标签: blackberry java-me

我尝试在FileExplorer示例中在BlackBerry基础上监听文件更改事件,但每当我添加或删除文件时,它总是显示“延迟持久性,因为设备正在使用”,我无法抓住什么。这是我的代码:

public class FileChangeListenner implements FileSystemJournalListener{

private long _lastUSN; // = 0;     
public void fileJournalChanged() {
    long nextUSN = FileSystemJournal.getNextUSN();
    String msg = null;       
    for (long lookUSN = nextUSN - 1; lookUSN >= _lastUSN && msg == null; --lookUSN) 
    {
        FileSystemJournalEntry entry = FileSystemJournal.getEntry(lookUSN);
        // We didn't find an entry
        if (entry == null) 
        { 
            break;
        }
        // Check if this entry was added or deleted
        String path = entry.getPath();            
        if (path != null) 
        {  
            switch (entry.getEvent()) 
            {
                case FileSystemJournalEntry.FILE_ADDED:
                    msg = "File was added.";                       
                    break;

                case FileSystemJournalEntry.FILE_DELETED:
                    msg = "File was deleted.";
                    break;
            }
        }
    }        
    _lastUSN = nextUSN;        
    if ( msg != null ) 
    {           
        System.out.println(msg);
    }
}
}

以下是来电者:

Thread t = new Thread(new Runnable() {
            public void run() {
                new FileChangeListenner();
                try {
                    Thread.sleep(5000);
                    createFile();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }                   
            }
        });
        t.start();

创建文件方法工作正常:

   private void createFile() {
    try {
        FileConnection fc = (FileConnection) Connector
                .open("file:///SDCard/newfile.txt");
        // If no exception is thrown, then the URI is valid, but the file
        // may or may not exist.
        if (!fc.exists()) {
            fc.create(); // create the file if it doesn't exist
        }
        OutputStream outStream = fc.openOutputStream();
        outStream.write("test content".getBytes());
        outStream.close();
        fc.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

并输出:

 0:00:44.475: Deferring persistence as device is being used.
 0:00:46.475: AG,+CPT
 0:00:46.477: AG,-CPT
 0:00:54.476: VM:+GC(f)w=11
 0:00:54.551: VM:-GCt=9,b=1,r=0,g=f,w=11,m=0
 0:00:54.553: VM:QUOT t=1
 0:00:54.554: VM:+CR
 0:00:54.596: VM:-CR t=5
 0:00:55.476: AM: Exit net_rim_bb_datatags(291)
 0:00:55.478: Process net_rim_bb_datatags(291) cleanup started
 0:00:55.479: VM:EVTOv=7680,w=20
 0:00:55.480: Process net_rim_bb_datatags(291) cleanup done
 0:00:55.481: 06/25 03:40:41.165 BBM FutureTask Execute: net.rim.device.apps.internal.qm.bbm.platform.BBMPlatformManagerImpl$3@d1e1ec79
 0:00:55.487: 06/25 03:40:41.171 BBM FutureTask Finish : net.rim.device.apps.internal.qm.bbm.platform.BBMPlatformManagerImpl$3@d1e1ec79

我也试图直接删除线程或在模拟器的sdcard中创建或删除文件,但它没有帮助。
请告诉我我的问题在哪里。感谢

1 个答案:

答案 0 :(得分:1)

您实例化FileChangeListenner,但您从未注册过它,也不会将其作为变量保存在任何地方。您可能需要添加此调用

FileChangeListenner listener = new FileChangeListenner();
UiApplication.getUiApplication().addFileSystemJournalListener(listener);

您可能还需要保留引用(listener),只要您想要接收事件即可。但也许不是(addFileSystemJournalListener()调用可能会这样做)。但是,您至少需要拨打addFileSystemJournalListener(),或者您永远不会回复fileJournalChanged()