在java / swing中关闭窗口时采取的正确动作是什么?

前端之家收集整理的这篇文章主要介绍了在java / swing中关闭窗口时采取的正确动作是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的CustomUIPanel类中写了这个测试代码: @H_404_2@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在关闭时执行什么?

解决方法

您可以使用JDialog的 setDefaultCloseOperation()方法,指定DISPOSE_ON_CLOSE: @H_404_2@setDefaultCloSEOperation(JDialog.DISPOSE_ON_CLOSE);

参见12.8 Program Exit.

附录:结合@ camickr的帮助答案,当窗口关闭或按下关闭按钮时,此示例退出.

@H_404_2@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 https://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(); } }); } }

猜你在找的Java相关文章