如何在NetBeans平台项目(插件)中正确处理文件保存

时间:2014-07-03 13:16:40

标签: java netbeans netbeans-platform netbeans-plugins

我尝试为NetBeans 7.4及更高版本创建新的语言支持。

在本地保存文件时,我需要将它们部署到服务器。所以我需要处理save事件。我这样做实现了Savable:


     public class VFDataObject extends MultiDataObject implements Savable {
       .......
       @Override
       public void save() throws IOException {
         .......
       }
     }

它适用于Save事件。但后来我意识到我需要扩展HtmlDataObject而不是MultiDataObject:


    public class VFDataObject extends HtmlDataObject implements Savable {
       .......
       @Override
       public void save() throws IOException {
         .......
       }
    }

现在save()没有被执行。为什么?由于HtmlDataObject扩展了MultiDataObject。应该怎么做才能做到这一点?

还有一种方法可以在NetBeans中捕获Save All事件吗?关于这方面是否有任何改变,你有任何信息吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您是否尝试过OnSaveTask SPI(https://netbeans.org/bugzilla/show_bug.cgi?id=140719)?当保存给定类型的文件时,API可用于执行任务。

这样的东西可用于侦听给定MIME类型的所有保存事件(在本例中为" text / x-sieve-java"):

public static class CustomOnSaveTask implements OnSaveTask {

    private final Context context;

    public CustomOnSaveTask(Context ctx) {
        context = ctx;
    }

    @Override
    public void performTask() {
        System.out.println(">>> Save performed on " + 
                NbEditorUtilities.getDataObject(context.getDocument()).toString());
    }

    @Override
    public void runLocked(Runnable r) {
        r.run();
    }

    @Override
    public boolean cancel() {
        return true;
    }

    @MimeRegistration(mimeType = "text/x-sieve-java", service = OnSaveTask.Factory.class, position = 1600)
    public static class CustomOnSaveTaskFactory implements OnSaveTask.Factory {

        @Override
        public OnSaveTask createTask(Context cntxt) {
            return new CustomOnSaveTask(cntxt);
        }

    }
}