AWT窗口监听器没有响应

时间:2015-04-07 19:46:08

标签: java swing user-interface awt

我正在研究AWT和摇摆,我开始使用一些简单的GUI来获取它。我编写了以下代码,它工作正常,直到我尝试关闭应用程序并且它不会退出。

import java.awt.*;
import java.awt.event.*;

public class AWTCounter extends Frame{
    private Button button;
    private Label label;
    private TextField txt;
    private int count=0;
    public AWTCounter(){
        super("AWT Counter");
        addWindowListener(new WindowListener(){

            @Override
            public void windowActivated(WindowEvent arg0) {}

            @Override
            public void windowClosed(WindowEvent arg0) {
                System.out.println("closing time!");
                System.exit(0);
            }

            @Override
            public void windowClosing(WindowEvent arg0) {}

            @Override
            public void windowDeactivated(WindowEvent arg0) {}

            @Override
            public void windowDeiconified(WindowEvent arg0) {}

            @Override
            public void windowIconified(WindowEvent arg0) {}

            @Override
            public void windowOpened(WindowEvent arg0) {}

        });
        label = new Label();
        add(label);
        label.setText("Counter");
        txt = new TextField();
        txt.setEditable(false);
        add(txt);
        button = new Button("count");
        add(button);
        setSize(400,100);
        setLayout(new FlowLayout());
        setVisible(true);
        button.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                ++count;
                txt.setText(Integer.toString(count));
            }
        });

    }
    public static void main(String [] args){
        Thread t =new Thread(new Runnable(){
            public void run(){
                new AWTCounter();
            }
        });
        t.start();
    }
}

我在源组件中注册了WindowListener(在这种情况下为AWTCounter,这是一个Frame)并实现了我将要使用的唯一方法,但它永远不会响应...任何关于它为什么表现的想法那样的?

非常感谢!

2 个答案:

答案 0 :(得分:3)

请参阅框架API - 对于WINDOW_CLOSING事件:"如果程序在处理此事件时没有明确隐藏或处置窗口,则取消窗口关闭操作。" - 如果将逻辑移到windowClosing方法中,应用程序应退出。 Swing JFrame更友好一点(如果您希望在关闭JFrame时退出应用程序而不需要WindowListener,则可以将默认关闭行为设置为关闭时退出)。

最后但同样重要的是,我建议您在EventDispatchThread上创建GUI。例如:

public static void main(String [] args) throws Exception{
    Runnable t = new Runnable(){
        public void run(){
            new AWTCounter();
        }
    };
    SwingUtilities.invokeAndWait(t);
}

答案 1 :(得分:1)

尝试这样做:

@Override
public void windowClosing(WindowEvent event) {
    System.exit(0); 
}