Java noob在这里。JDialog
当用户按下Windows关闭按钮时,扩展的Swing类不会处理-
java.exe保留在内存中。我已经将代码剥离到了这个shell上,但我仍然可以做到这一点。
我看了其他示例,例如Basic Java Swing,如何退出和处置您的应用程序/JFrame。
当我注释掉System.exit(0)
该示例代码中的两行时,该示例中的类仍然正确处理。我想让我的班级丢掉什么?
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);
//System.exit(0);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
public WhyNoDispose(String title) {
super(new JFrame(title), ModalityType.APPLICATION_MODAL);
pack();
}
}
您正在创建一个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();
}
}
Logcat: 致命异常:IntentService[BMI]进程:用户。通用域名格式。test2,PID:3377 java。lang.NullPointerException:尝试调用虚拟方法“java”。字符串java。朗,反对。服务上的空对象引用上的toString()。SendBpRecordServer。android上的onHandleIntent(sendbRecordServer
问题内容: 创建对话框的最简单方法是: 在一个窗口中,我提供用于信封寻址的数据,还从尺寸列表中设置字体类型 当单击“确定”时,在同一窗口或下一个窗口中,我将预览到给定名称和使用所选字体大小后的信封外观 它的外观应类似于: 替代文字http://img15.imageshack.us/img15/7355/lab10aa.gif 我应该使用Jdialog吗?还是JOptionPane就足够了?下一步
我试图找出如何单击按钮“停用”。这是html代码: 我试着这样点击这个按钮: 但是这没有帮助
对话框的内容不是在页面最初可见,而是在用户操作时显示额外的信息。 Toasts Materialize 提供了非常简单的方法,来弹出一些信息,同时也不会让用户感到突兀。这些 Toasts 显示的位置和大小会随着你的设备的不同而改变。 在 JavaScript 中调用 Materialize.toast() 方法来使用。 // Materialize.toast(message, displayLe
对话框是一个现代GUI应用不可或缺的一部分。对话是两个人之间的交流,对话框就是人与电脑之间的对话。对话框用来输入数据,修改数据,修改应用设置等等。 输入文字 QInputDialog提供了一个简单方便的对话框,可以输入字符串,数字或列表。 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial In this
打开或保存文件,弹出警告等对话框 进程: 主进程 选择多个文件和目录的对话框: 1 const {dialog} = require('electron') 2 console.log(dialog.showOpenDialog({properties: ['openFile', 'openDirectory', 'multiSelections']})) Copied! 对话框默认是在主线程中