gpt4 book ai didi

Java GUI、JFrames 和对话框

转载 作者:行者123 更新时间:2023-11-29 10:18:15 25 4
gpt4 key购买 nike

我读到你不应该在主线程上 .show() 帧以避免死锁,这是一个真正的问题吗?应该始终避免这种情况吗?此外,一旦显示任何类型的对话框(例如 ProgressMonitorInputStream),即使它关闭并完成,您是否仍必须调用 System.exit() 来终止应用程序? JDialog 怎么样?

最佳答案

I read that you shouldn't .show() frames on the main thread to avoid deadlock

它会停止阅读那本书/帖子/网页。

要解决您的第一点:

我认为您可能遗漏了一些要点。

所有 UI 代码必须Event Dispatching Thread 上执行(美国东部时间),这包括甚至还没有出现在屏幕上的 UI 组件。

您应该在美国东部时间执行耗时的任务,因为这会阻止屏幕更新并使您的应用程序无响应,这是用户非常非常讨厌的。

耗时的任务应该在自己的线程中执行(这实际上是一个完全不同的主题),使用类似 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);
}
});
}
}

解决你的第二点:

是也不是。 JFrame 类提供了一个 defaultCloseOperation您可以使用它来终止主应用程序。

但是,如果您只显示JDialog 或其他类型的窗口,是的,您将需要调用System.exit 以终止JVM。

在支持的地方,您可以使用 WindowListener.windowClosed窗口关闭时要监视的事件并采取适当的操作。

关于Java GUI、JFrames 和对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12171650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com