rub*_*buc 1 java user-interface swing awt event-dispatch-thread
我读到你不应该.show()
在主线程上构建框架以避免死锁,这是一个真正的问题.这应该总是避免吗?此外,一旦您显示任何类型的对话框,例如ProgressMonitorInputStream,即使它已关闭并完成,您仍然必须调用System.exit()
以终止应用程序吗?JDialog怎么样?
我读到你不应该在主线程上使用.show()帧来避免死锁
它停止阅读那本书/帖子/网页.
解决你的第一点:
我想你可能会错过一些观点.
所有UI代码必须在事件调度线程(EDT)上执行,这包括尚未在屏幕上显示的UI组件.
你应该不执行耗时的任务之一EDT,因为这将防止被更新的屏幕,使您的应用程序无响应,哪些用户真的,真的很讨厌.
耗时的任务应该在自己的Thread中执行(这实际上是一个完全不同的主题),使用SwingWorker或SwingUtilities.invokeLater/andWait之类的东西来重新同步/更新UI.
public class BackgroundTask implements Runnable { // extends Thread {
public void run() {
for (int i = 0; i < noQueries; i++) {
runDatabaseQuery(i);
updateProgress(i);
}
}
private void updateProgress(final int queryNo) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
statusLabel.setText("Query: " + queryNo);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
为了解决你的第二点:
是的,不是.本JFrame
类提供了一个defaultCloseOperation您可以使用终止的主要应用.
但是,如果您显示的是所有JDialog
窗口或其他类型的窗口,是的,您将需要调用System.exit
以终止JVM.
在支持的位置,您可以使用WindowListener.windowClosed事件来监视窗口关闭的时间并采取适当的操作.
归档时间: |
|
查看次数: |
133 次 |
最近记录: |