【问题标题】:awt window not closing when close button is clicked单击关闭按钮时,awt 窗口未关闭
【发布时间】:2012-09-26 12:45:20
【问题描述】:

我为虚拟键盘实现了一个示例类并运行了这个 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 是重量级的,即它的组件使用系统的资源,Sw​​ing 提供了与平台无关的轻量级组件,如 JButton、JTextField、JTextArea、JRadioButton、JCheckbox、JMenu、JColorChooser 等。

标签: java awt frame windowlistener


【解决方案1】:

您的代码不正确。而不是

f1.addWindowListener( new WindowAdapter() {
  ...

试试

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

这将关闭您的窗口。

【讨论】:

    【解决方案2】:

    最好使用方法public void dispose()

    vk.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                vk.dispose(); // use dispose method 
             }
         }
    );
    

    AWT 是重量级的,即它的组件使用系统资源

    Windows 是非阻塞的。这意味着一旦您在代码中创建了一个,您的代码就会继续执行。

    这意味着您的 Window 在创建后可能会立即超出范围,除非您在其他地方明确存储了对它的引用。此时窗口仍在屏幕上。

    这也意味着当你完成它时,你需要一些其他的方法来摆脱它。输入 Window dispose() 方法,该方法可以从 Window 的一个侦听器中调用。

    【讨论】:

      【解决方案3】:

      检查一下:

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      

      它基本上告诉 Windows 管理器在按下“X”时关闭您的应用程序。

      【讨论】:

      • dude Gambler 使用 AWT 组件而不是 Swing 组件。此方法不可用 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);对于 Frame,这是用于 JFrame
      • 认真的吗? -1。这个答案只是表明你没有阅读这个问题。它使用 AWT,而不是 Swing。我也期待更多。
      猜你喜欢
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2016-06-16
      相关资源
      最近更新 更多