栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

WatchService和SwingWorker:如何正确执行?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WatchService和SwingWorker:如何正确执行?

实际上,@ Eels的评论并没有停止敲响我的脑袋-并最终注册:这是要走的路,但是不需要任何“人工”结构,因为我们已经 有了 完美的候选人-
这是PropertyChangeEvent本身:-)

从我的问题的总体过程描述中,前三个项目符号保持不变

  • 相同:扩展SwingWorker
  • 一样:在构造函数中做注册的事情
  • 相同:将无限循环放在doInBackground中等待键
  • 更改:通过key.pollEvents检索到的每个WatchEvent中创建适当的PropertyChangeEvent并发布PropertyChangeEvent
  • 已更改:在过程中触发先前创建的事件(块)

修改后

FileWorker

@SuppressWarnings("unchecked")public class FileWorker extends SwingWorker<Void, PropertyChangeEvent> {    public static final String FILE_DELETeD = StandardWatchEventKinds.ENTRY_DELETE.name();    public static final String FILE_CREATED = StandardWatchEventKinds.ENTRY_CREATE.name();    public static final String FILE_MODIFIED = StandardWatchEventKinds.ENTRY_MODIFY.name();    // final version will keep a map of keys/directories (just as in the tutorial example)     private Path directory;    private WatchService watcher;    public FileWorker(File file) throws IOException {        directory = file.toPath();        watcher = FileSystems.getDefault().newWatchService();        directory.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);    }    @Override    protected Void doInBackground() throws Exception {        for (;;) { // wait for key to be signalled WatchKey key; try {     key = watcher.take(); } catch (InterruptedException x) {     return null; } for (WatchEvent<?> event : key.pollEvents()) {     WatchEvent.Kind<?> kind = event.kind();     // TBD - provide example of how OVERFLOW event is handled     if (kind == OVERFLOW) {         continue;     }     publish(createChangeEvent((WatchEvent<Path>) event, key)); } // reset key return if directory no longer accessible boolean valid = key.reset(); if (!valid) {     break; }        }        return null;    }        protected PropertyChangeEvent createChangeEvent(WatchEvent<Path> event, WatchKey key) {        Path name = event.context();        // real world will lookup the directory from the key/directory map        Path child = directory.resolve(name);        PropertyChangeEvent e = new PropertyChangeEvent(this, event.kind().name(), null, child.toFile());        return e;    }    @Override    protected void process(List<PropertyChangeEvent> chunks) {        super.process(chunks);        for (PropertyChangeEvent event : chunks) { getPropertyChangeSupport().firePropertyChange(event);        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号