gpt4 book ai didi

java - 当关闭 JFrame 时,程序中的所有内容都会终止吗?

转载 作者:行者123 更新时间:2023-11-30 06:32:38 28 4
gpt4 key购买 nike

我有一个扩展 JFrame 的 GUI,它是由另一个对象的构造函数创建的:

public Engine(int width, int height) {
//ui is the GUI object declared as a field of this object
ui = new UI(width, height);
ui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ui.setVisible(true);
}

当单击某些按钮时,GUI 的事件监听器也会创建新线程:

public void actionPerformed(ActionEvent actionEvent) {  
if(actionEvent.getSource().equals(ui.play)) {
if(clickerThread == null) {
autoClicker= new AutoClicker();
clickerThread = new Thread(autoClicker);
clickerThread.start();
}
}
}

这是否意味着当我点击窗口上的 X 按钮时,与该程序相关的所有内容(例如自动点击器线程、分配给该程序的内存中的所有内容)都会被清除,并且将来不会减慢计算机速度?

或者,是否需要在某个地方以某种方式需要 System.exit(0),以便使该应用程序在计算机启动并关闭该应用程序后从未打开过?

提前致谢!

最佳答案

根据 JFrame API :

public void setDefaultCloseOperation(int operation)
Sets the operation that will happen by default when the user initiates a "close" on this frame. You must specify one of the following choices:

  • DO_NOTHING_ON_CLOSE (defined in WindowConstants): Don't do anything; require the program to handle the operation in the windowClosing method of a registered WindowListener object.
  • HIDE_ON_CLOSE (defined in WindowConstants): Automatically hide the frame after invoking any registered WindowListener objects.
  • DISPOSE_ON_CLOSE (defined in WindowConstants): Automatically hide and dispose the frame after invoking any registered WindowListener objects.
  • EXIT_ON_CLOSE (defined in JFrame): Exit the application using the System exit method. Use this only in applications.

所以,是的,这将通过调用系统退出来退出应用程序。

<小时/>

只是一个小警告:如果您的线程连接不正确,并且您有长时间运行的代码恰好占用了 Swing 事件线程(EDT),那么 JFrame 的终止按钮将不会响应,直到 EDT 被解除阻塞。 .

<小时/>

侧面建议 2,关于:

I have a GUI that extends JFrame...

我建议不要创建扩展顶级窗口(例如 JFrame)的类,因为这会创建只能用作 JFrame 的不灵活的类。更好地调整您的 GUI 类来创建(或者如果需要,扩展)JPanel,因为这样您的 GUI 可以在许多不同的上下文中显示 - 在 JFrame、JDialog、另一个 JPanel、JTabbedPanel 中...稍微释放你的代码。

<小时/>

侧面建议 3:关于在 Swing 应用程序中创建新线程,如果自动点击器将与 Swing 应用程序本身交互,那么您可能希望考虑使用 SwingWorker 来帮助创建后台线程,因为此构造内部具有机制有助于后台线程和 GUI 之间的安全通信,而不会破坏 Swing 线程规则。 Google“Swing 中的并发”可获取更多相关信息。

关于java - 当关闭 JFrame 时,程序中的所有内容都会终止吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45773793/

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