点击关闭按钮时,AWT窗口不会关闭

6

我为虚拟键盘实现了一个示例类,并运行了VirtualKeyboardTest。键盘出现了,但主要问题是当点击x按钮时它无法正确关闭。我该如何纠正这个问题?

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

public class VirtualKeyboardTest
{
    public static void main(String args[])
    {
        VirtualKeyboard vk = new VirtualKeyboard();
        vk.setSize(500,300);
        vk.setVisible(true);
        Frame f1 = new Frame();
        f1.addWindowListener( new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent we) {

                System.exit(0);
            }
        } );
    }
}

AWT是重量级的,即其组件使用系统资源,Swing提供平台无关且轻量级的组件,如JButton、JTextField、JTextArea、JRadioButton、JCheckbox、JMenu、JColorChooser等。 - Jaimin Patel
3个回答

5
你的代码有误。应该使用

而不是。
f1.addWindowListener( new WindowAdapter() {
  ...

尝试

vk.addWindowListener( new WindowAdapter() {
  ...

这将关闭您的窗口。

4
最好使用方法 public void dispose()
vk.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent we) {
            vk.dispose(); // use dispose method 
         }
     }
);

AWT是重量级的,即其组件使用系统资源。
窗口是非阻塞的。这意味着一旦在代码中创建一个窗口,您的代码就会继续执行。
这意味着您的窗口可能立即超出范围,除非您明确将引用存储在其他地方。此时,窗口仍然显示在屏幕上。
这也意味着您需要其他方法来在完成后摆脱它。进入Window dispose()方法,可以从Window的侦听器中调用该方法。

-1

看一下这个:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

它基本上告诉窗口管理器,在按下“X”键时关闭你的应用程序。


2
小伙子使用AWT组件而不是Swing组件。这种方法不可用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 对于Frame,应该使用JFrame。 - Pratik
1
真的吗?-1。这个回答只表明你没有读懂问题。它使用的是AWT,而不是Swing。我也希望能得到更多的帮助。 - Zizouz212

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接