我在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的任何想法?是否允许匿名内部类在其类之外调用静态方法?如果是这样,为什么这段代码会编译?
答案 0 :(得分: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");
}
}
即,
finally
答案 1 :(得分:0)
此处未调用方法handleEvent()
。你所做的是定义匿名类并动态创建一个实例。
您需要将此侦听器(eclipseListener
)注册到某个事件处理程序,该事件处理程序将在事件触发时调用方法handleEvent()
。