Wie füge ich IResourceChangeListener im Eclipse-Plugin hinzu?

Ich versuche, IResourceChangeListener in mein Eclipse-Plugin einzufügen, indem ich das folgende Tutorial verwende:

https: //eclipse.org/articles/Article-Resource-deltas/resource-deltas.htm

Allerdings habe ich nirgendwo gefunden, wo ich diesen Listener-Code hinzufügen soll. Ich fand, dass sie gerade eine neue Klasse erstellen, in der sie den Listener-Code hinzufügten. Wenn ich es nur in einer Java-Klasse hinzufüge, woher weiß Eclipse dann, welche Klasse auszulösen ist, wenn die Ereignisse eintreten? Ich habe versucht, den Code wie folgt in activator.java abzulegen (ich habe ihn dort hinzugefügt, weil er den Lebenszyklus des Plugins beibehält).

Ich habe die Start- und Stoppmethode geändert.

package testPlugin;

import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends AbstractUIPlugin {

    // The plug-in ID
    public static final String PLUGIN_ID = "testPlugin"; //$NON-NLS-1$

    /** the resource listener on URI changes */
    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IResourceChangeListener listener;

    // The shared instance
    private static Activator plugin;

    /**
     * The constructor
     * 
     */

    public Activator() {

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
     * )
     */
    public void start(BundleContext context) throws Exception {
        super.start(context);
        plugin = this;
        listener = new IResourceChangeListener() {
            public void resourceChanged(IResourceChangeEvent event) {
                System.out.println("Something changed!");
            }
        };

        workspace.addResourceChangeListener(listener);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
     * )
     */
    public void stop(BundleContext context) throws Exception {
        if (workspace != null) {
            workspace.removeResourceChangeListener(listener);
        }
        plugin = null;
        super.stop(context);
    }

    /**
     * Returns the shared instance
     *
     * @return the shared instance
     */
    public static Activator getDefault() {

        return plugin;
    }

    /**
     * Returns an image descriptor for the image file at the given plug-in
     * relative path
     *
     * @param path
     *            the path
     * @return the image descriptor
     */
    public static ImageDescriptor getImageDescriptor(String path) {
        return imageDescriptorFromPlugin(PLUGIN_ID, path);
    }
}

Aber es funktioniert nicht. Wenn ich meinen aktuellen Editor durch einen externen MKS-Check-out ändere, wird "Something has changed" nicht in consol gedruckt, oder es funktioniert einfach nicht.

Wie kann ich es zum Laufen bringen? Wo soll ich den Code eigentlich hinzufügen? Ich möchte den Arbeitseditor (kann der Standard-Java-Editor sein) in Eclipse ändern, ohne mit diesem Listener einen neuen Editor zu erstellen.

Vielen Dank im Voraus

Antworten auf die Frage(0)

Ihre Antwort auf die Frage