我正在研究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)并实现了我将要使用的唯一方法,但它永远不会响应...任何关于它为什么表现的想法那样的?
非常感谢!
答案 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);
}