1

我在 Eclipse 应用程序中有以下代码:

import org.eclipse.swt.widgets.Listener;
public class X {
  public void test() {
     Listener eclipseListener = new Listener() {
        public void handleEvent(Event evt) {
            System.err.println("starting");
            Y.externalMethod();
            System.err.println("finished");
        }
    }
}

public class Y {
    public static void externalMethod() {
        System.err.println("in class Y");
    }
}

当我在类 X 中运行方法测试时,我得到以下输出:

开始

我不明白为什么 externalMethod 没有在 Y 类中运行以及为什么控制没有返回到 X 类(它从不打印“完成”或“在 Y 类中”)。

关于为什么 externalMethod 不运行的任何想法?匿名内部类是否不允许在其类外调用静态方法?如果是这样,为什么这段代码会编译?

4

2 回答 2

1

代替

    public void handleEvent(Event evt) {
        System.err.println("starting");
        Y.externalMethod();
        System.err.println("finished");
    }

你可能会有更好的运气:

    public void handleEvent(Event evt) {
        System.err.println("starting handleEvent");
        try {
            Y.externalMethod();
        } finally {
            System.err.println("finished handleEvent");
        }
    }

那是,

  1. 将方法退出跟踪放入finally
  2. 将方法名称添加到跟踪行
于 2013-02-04T22:41:42.070 回答
0

handleEvent()此处不调用该方法。您所做的是定义匿名类并动态创建一个实例。

您需要将此侦听器 ( ) 注册到某个事件处理程序,该事件处理程序将在事件触发时eclipseListener调用该方法。handleEvent()

于 2013-02-04T22:31:26.317 回答