Java ActionListener没有响应[示例]

Java ActionListener没有响应[示例],java,swing,model-view-controller,actionlistener,Java,Swing,Model View Controller,Actionlistener,我已将ActionListener类作为参数实现,但没有响应 我正在使用MVC模式并在其他控制器中调用控制器。 我已经创建了我的程序的简化版本,但它仍然不起作用 我有一个框架和一个按钮,按下时,在控制台打印 public class MainFrame extends JFrame { private JButton button = new JButton("Print"); public MainFrame() { setSize(200, 100);

我已将ActionListener类作为参数实现,但没有响应

我正在使用MVC模式并在其他控制器中调用控制器。 我已经创建了我的程序的简化版本,但它仍然不起作用

我有一个框架和一个按钮,按下时,在控制台打印

public class MainFrame extends JFrame {

    private JButton button = new JButton("Print");

    public MainFrame() {
        setSize(200, 100);

        this.add(button);

        setLocationRelativeTo(null);
        this.setDefaultCloseOperation(MainFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void validateButton(ActionListener e) {
        this.button.addActionListener(e);
    }
}
这就是行动

public class ValidateAction implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("It works!");
    }

}
我将此操作称为EditController内部的操作

public class EditController {

    private MainFrame mf = new MainFrame();

    public EditController(MainFrame mf) {
        this.mf = mf;

        this.mf.validateButton(new ValidateAction());
    }

}
public class MenuController {

    public MenuController(MainFrame mf) {

        this.makeEditController(mf);
    }

    public void makeEditController(MainFrame mf) {
        new EditController(mf);
    }

}
public class Controller {

    public Controller(MainFrame mf) {

        this.makeMenuController(mf);
    }

    public void makeMenuController(MainFrame mf) {
        new MenuController(mf);
    }

}
我在MenuController中调用这个EditController

public class EditController {

    private MainFrame mf = new MainFrame();

    public EditController(MainFrame mf) {
        this.mf = mf;

        this.mf.validateButton(new ValidateAction());
    }

}
public class MenuController {

    public MenuController(MainFrame mf) {

        this.makeEditController(mf);
    }

    public void makeEditController(MainFrame mf) {
        new EditController(mf);
    }

}
public class Controller {

    public Controller(MainFrame mf) {

        this.makeMenuController(mf);
    }

    public void makeMenuController(MainFrame mf) {
        new MenuController(mf);
    }

}
我在主控制器内部调用MenuController

public class EditController {

    private MainFrame mf = new MainFrame();

    public EditController(MainFrame mf) {
        this.mf = mf;

        this.mf.validateButton(new ValidateAction());
    }

}
public class MenuController {

    public MenuController(MainFrame mf) {

        this.makeEditController(mf);
    }

    public void makeEditController(MainFrame mf) {
        new EditController(mf);
    }

}
public class Controller {

    public Controller(MainFrame mf) {

        this.makeMenuController(mf);
    }

    public void makeMenuController(MainFrame mf) {
        new MenuController(mf);
    }

}
最后我把主课的所有东西都叫来了

public class Main {

    public static void main(String[] args) {
        MainFrame mf = new MainFrame();
        new Controller(mf);
    }

}
它不起作用了…

您要创建两次大型机。见评论:

class EditController {

    private MainFrame mf; //= new MainFrame();

    public EditController(MainFrame mf) {
        this.mf = mf;
        this.mf.validateButton(new ValidateAction());
    }
}

错误信息是什么?没有错误,只是什么都不做。消除正常工作的内容,然后发布一个。这样做也是一种很好的调试技术。同样在EditController中,为什么专用大型机mf=新大型机?它应该是私有的;当我在MenuController内部调用它时,它就工作了。修复:显然,我只需要删除这个。mf=mf;来自EditController。我不知道为什么会有这样的问题。