为什么我会找到“找不到合适的匿名方法”错误?

时间:2011-12-11 12:35:41

标签: java anonymous-types inner-classes anonymous

Runnable r = new Runnable() {
    @Override
    public void run() {
        if(varx) {
            new displayFullScreen().setVisible(true);
        } else {
            javax.swing.JOptionPane.showMessageDialog(this, "dfv"); // this statement gives an error
        }
    }
};
new Thread(r,"full_screen_display").start();

标记行中的错误显示"No suitable method found for anonymous (<java.lang.Runnable>,java.lang.String)

为什么我直接写javax.swing._CLASS_时呢?

3 个答案:

答案 0 :(得分:4)

问题是该行中的this是指您创建的匿名Runnable实例,而不是围绕它的类。你需要更清楚地了解你在那里this的意思。

如果封闭的类名为Foo,并且是一个摆动Component,您应该写:

javax.swing.JOptionPane.showMessageDialog(Foo.this, "dfv"); 

有关详细信息,请参阅Nested Classes文档。

答案 1 :(得分:0)

原因是javax.swing.JOptionPane.showMessageDialog期望Component作为第一个参数,但您传入this,这是一个Runnable(匿名)。

答案 2 :(得分:0)

JOptionPane.showMessageDialog documentation说:

  

parentComponent - 确定对话框所在的Frame   显示;如果为null,或者如果parentComponent没有Frame,则为默认值   使用框架

javax.swing.JOptionPane.showMessageDialog(this, "dfv");无效,因为thisRunnable,不会从Component继承。 请改用:

javax.swing.JOptionPane.showMessageDialog(null, "dfv");