Java对话框不出来_Java对话框不处理

小编典典

您正在创建一个JFrame,并且从不将其放置在这里:

public WhyNoDispose(String title) {

super(new JFrame(title), ModalityType.APPLICATION_MODAL); // *********

pack();

}

因此,由于JFrame处于活动状态并且GUI已呈现,因此Swing事件线程将继续运行。

如果改为使JFrame起作用,以使程序在JFrame关闭时退出,然后显式处理JFrame,则程序现在退出:

import java.awt.Window;

import javax.swing.JFrame;

import javax.swing.JDialog;

public class WhyNoDispose extends JDialog {

public static void main(String[] args) {

javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {

try {

WhyNoDispose frame = new WhyNoDispose("my title");

frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

JFrame win = (JFrame) frame.getOwner();

win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

win.dispose();

// System.exit(0);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

public WhyNoDispose(String title) {

super(new JFrame(title), ModalityType.APPLICATION_MODAL);

pack();

}

}

但这至少可以说是非常笨拙的代码-如果拥有的窗口不是JFrame怎么办?如果为空怎么办?

另一种解决方案是根本不使用JFrame,这样在处置JDialog时,就不会再留有任何持久化窗口来使事件线程持久化:

import java.awt.Window;

import javax.swing.JFrame;

import javax.swing.JDialog;

public class WhyNoDispose extends JDialog {

public static void main(String[] args) {

javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {

try {

WhyNoDispose frame = new WhyNoDispose("my title");

frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

public WhyNoDispose(String title) {

super((JFrame)null, title);

pack();

}

}

2020-11-26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值