当前位置: 首页 > 面试题库 >

在java / swing中关闭Windows时应采取的正确措施是什么?

彭鹭洋
2023-03-14
问题内容

我刚刚在CustomUIPanel类中编写了以下测试代码:

public static void main(String[] args) {
    final JDialog dialog = CustomUIPanel.createDialog(null, 
       CustomUIPanel.selectFile());
    dialog.addWindowListener(new WindowAdapter() {
        @Override public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
}

它是否CustomUIPanel.main()是程序的入口点,它可以正常工作,但是让我感到奇怪:如果另一个类需要CustomUIPanel.main()进行测试,该怎么办?那我打给我System.exit(0)是不正确的。

如果没有顶层窗口,是否有办法告诉Swing事件分配线程自动退出?

如果不是,如果目标是在所有顶级窗口都关闭时退出程序,那么JDialog / JFrame在关闭时应该做什么呢?


问题答案:

您可以使用的setDefaultCloseOperation()方法JDialog,指定DISPOSE_ON_CLOSE

setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

另请参见12.8程序退出。

附录:包含@camickr的有用答案,当关闭窗口或按下关闭按钮时,此示例退出。

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;

/** @see http://stackoverflow.com/questions/5540354 */
public class DialogClose extends JDialog {

    public DialogClose() {
        this.setLayout(new GridLayout(0, 1));
        this.add(new JLabel("Dialog close test.", JLabel.CENTER));
        this.add(new JButton(new AbstractAction("Close") {

            @Override
            public void actionPerformed(ActionEvent e) {
                DialogClose.this.setVisible(false);
                DialogClose.this.dispatchEvent(new WindowEvent(
                    DialogClose.this, WindowEvent.WINDOW_CLOSING));
            }
        }));
    }

    private void display() {
        this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new DialogClose().display();
            }
        });
    }
}


 类似资料:
  • 问题内容: 在这里说这是必需的 但是我看到即使我没有指定action属性,表单也会被提交,并且表单也将被提交到当前页面,这正是我想要的。 问题答案: 该要求仅按 标准 。完全有可能在页面上执行任何操作而不遵循标准。如果执行此操作,则可能无法正常显示或工作,但很可能会正确显示或工作。目标是关注它们,其思想是,如果您遵循它们,您的页面将 始终 有效;您不必担心任何事情。 是的,该表单 必须 具有HTM

  • 问题内容: 在Android应用程序中(或者在没有区别的情况下,在Java中更常见),什么时候变量值发生变化的最佳方法是什么? 问题答案: 您真正想要做的是设置事件驱动模型,以在事件发生时触发侦听器(在您的情况下,说变量值已更改)。这不仅对于Java,而且对于其他编程语言也非常普遍,尤其是在UI编程的情况下(尽管不一定如此) 通常,这可以通过执行以下步骤来完成: 确定在事件触发时侦听器应实现的接口

  • 问题内容: 和之间的MySQL FK有什么区别?从文档来看,它们看起来完全一样。是这样吗 如果是这样,为什么两者都有? 问题答案: 从MySQL文档开始:https : //dev.mysql.com/doc/refman/8.0/en/create-table-foreign- keys.html 某些数据库系统具有延迟检查,并且是延迟检查。在MySQL中,外键约束会立即检查,因此与相同。

  • 问题内容: 我将一些数据存储在mongodb中,并使用js / nodejs和mongoose访问它。我可以使用.find()在数据库中找到合适的东西,这不是问题。问题是如果没有东西,我想做点其他事情。目前,这是我正在尝试的: 当我执行act.params不在尼克索引中的操作时,这些命令都不会触发。发生这种情况时,我什么都不需要控制台,但是当它确实存在时,我确实让user.nick可以很好地进行记

  • 本文向大家介绍失效副本是指什么?有那些应对措施?相关面试题,主要包含被问及失效副本是指什么?有那些应对措施?时的应答技巧和注意事项,需要的朋友参考一下 不能及时与leader同步,暂时踢出ISR,等其追上leader之后再重新加入

  • 我有一个java应用程序,它在JTabbedPane上加载并显示一个applet。所以基本上GUI是: 小程序-- 我已经在JFrame类中放入了这一标准行: 下面是我在 JFrame 类中的方法,它应该在窗口关闭时调用: 然后,在我的Tabbed Pane类中,我有一个管理Applets的arrayList: 我循环遍历JPanels的ArrayList,如下所示: JPanel类中的stopG