Java:WindowAdapter windowClosed方法没有运行

时间:2014-03-05 09:42:05

标签: java event-handling windowlistener

我目前正在一个扩展JFrame的类中运行它。当我关闭窗口时,我在控制台中看不到RAN EVENT HANDLER。这不是主窗口,并且该窗口的多个实例可以同时存在。

    this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosed(WindowEvent e) {
            System.out.println("RAN EVENT HANDLER");
        }
    });

此方法位于名为initialiseEventHandlers()的方法中,该方法在构造函数中调用,因此我确信代码正在运行。

我做错了什么?

谢谢!

编辑:这是完整的(汇总的)代码:

public class RacesWindow extends JFrame {

private JPanel mainPanel;
private JLabel lblRaceName;
private JTable races;
private DefaultTableModel racesModel;

public RacesWindow() {
    this.lblRaceName = new JLabel("<html><strong>Race: " + race.toString()
            + "</strong></html>");
    initialiseComponents();
    this.setMinimumSize(new Dimension(500, 300));
    this.setMaximumSize(new Dimension(500, 300));
    initialiseEventHandlers();
    formatWindow();
    pack();
    setVisible(true);
}

public void initialiseComponents() {
    mainPanel = new JPanel(new BorderLayout());
    races = new JTable();
    racesModel = new DefaultTableModel();
    races.setModel(racesModel);
}

public void initialiseEventHandlers() {
    System.out.println("EVENTHANDLER CODE IS CALLED"); //for debugging
    this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosed(WindowEvent e) {
            System.out.println("RAN EVENT HANDLER");
            appManager.removeOpenWindow(race.toString());
        }
    });
}}


public void formatWindow() {
    mainPanel.add(lblRaceName, BorderLayout.NORTH);
    mainPanel.add(new JScrollPane(races), BorderLayout.CENTER);
    mainPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
    this.add(mainPanel);
}
}

4 个答案:

答案 0 :(得分:0)

这应该有效

this.addWindowListener(new WindowListener() {
    @Override
    public void windowClosed(WindowEvent e) {
        System.out.println("RAN EVENT HANDLER");
    }
});

答案 1 :(得分:0)

将其添加到构造函数中。

  

setDefaultCloseOperation(EXIT_ON_CLOSE);

答案 2 :(得分:0)

我发现我使用了错误的方法:windowClosed()。我应该使用windowClosing()

答案 3 :(得分:0)

以下代码对我有用。

  new ProcessBuilder("java -cp mypath MyClass my args").start();