0

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でファイルを直接作成または削除しようとしましたが、役に立ちません。
私の問題はどこにあるのか教えてください。ありがとう

4

1 に答える 1

1

をインスタンス化しますがFileChangeListenner、登録することはなく、変数としてどこにも保持しません。おそらくこの呼び出しを追加する必要があります

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

listenerまた、イベントを受信する限り、参照()を保持する必要がある場合もあります。しかし、そうではないかもしれません(addFileSystemJournalListener()呼び出しがそれを行う可能性があります)。ただし、少なくともへの呼び出しが必要です。そうしないと、コールバックされるaddFileSystemJournalListener()ことはありません。fileJournalChanged()

于 2012-06-25T05:28:59.363 に答える