编译错误将此指针传递给构造函数?

Gin*_*ino 2 java scope this jframe jdialog

public class MyWindow extends JFrame {

    JButton botonCreate = new JButton("Open son windows");

    public void doSomething(){
        botonCreate.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JDialog vce = new JDialog(this);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

这个想法是在孩子可见时阻止JFrame父(JDialog).

JDialog的构造函数的参数必须是包含类"MyWindow",但是范围问题是ActionListener,这会产生以下错误.

我怎么解决这个问题?

错误信息:

没有为JDialog()构造函数找到合适的构造函数JDialog(java.awt.Frame)不适用(实际参数不能通过方法调用转换转换为java.awt.Frame)构造函数JDialog(java.awt.Dialog)不适用(实际参数不能通过方法调用转换转换为java.awt.Dialog)

Jus*_*tin 8

你的问题很简单.当你正在使用this你实际使用时ActionListener.this.因此,要纠正此错误,您必须向编译器解释您希望this通过指定它来实际使用包含类MyWindow.this.

class MyWindow extends JFrame { 

    JButton botonCreate = new JButton("Open son windows"); 

    public void doSomething(){ 
        botonCreate.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent e) { 
                JDialog vce = new JDialog(MyWindow.this); 
            } 
        }); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)


tem*_*def 5

我想你要替换这一行:

JDialog vce = new JDialog(this);
Run Code Online (Sandbox Code Playgroud)

到这一个:

JDialog vce = new JDialog(MyWindow.this);
Run Code Online (Sandbox Code Playgroud)

这里的问题是this,在您定义的匿名内部类的上下文中,引用内部类而不是定义内部类的MyWindow对象.更改thisMyWindow.this告诉Java它是MyWindow您想要的当前对象,而不是内部类.

希望这可以帮助!