为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们需要在Java中重新定义窗口关闭方法?

为什么我们需要在Java中重新定义窗口关闭方法?

拉风的咖菲猫 2024-01-05 16:13:40
我需要知道为什么我们需要重新定义窗口关闭方法。我尝试在网上查找任何答案,但找不到任何答案。// 没有代码有答案吗?
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我认为这曾经是 AWT 的问题。


IIRC 这些类提供了一个不执行任何操作的默认方法,您可以重载它 - 为了执行诸如发送应用程序正在关闭的任何适当通知、保存任何未保存的数据、释放您存储的任何资源等操作等等等等。


从这个角度来看,这是有道理的。框架不知道您在关闭时要做什么,因此它为您的代码提供了一个位置。


由于这个(或任何“为什么?”问题)有点哲学性,请允许我通过一个简短的转移来深入探讨这个问题,它说明了解决同一问题的不同方法:


在 Mac 上,“代表”有相似但不同的概念。例如,我不会将 Window 子类化,而是将 Window 交给一个“Window-Lifecycle-Delegate-iser”,然后 api 将在发生时调用我的委托上的适当方法。


这在一定程度上对于 Mac 来说效果很好,因为 Objective-C 比 Java 更接近 Smalltalk 风格。特别是,您可以向对象发送一条消息(读作:调用方法),如果该对象没有说出该消息(读作:该对象上没有相应的方法),那么在 Objective-C 中,它就会无处可去,而在爪哇它却尖叫着死去。


因此,在 Java 中,您必须实现接口上的每个方法,而对于 Objective-C,您只需执行您真正关心的方法。因此,您可以创建一个大型 API,其中可能会对委托进行 50-100 次调用,并且您不会让开发人员不知所措,因为他们可以忽略其中的 95-99%。


以下是 Java SE 教程中的一些代码:


public class HelloWorldSwing {

/**

 * Create the GUI and show it.  For thread safety,

 * this method should be invoked from the

 * event-dispatching thread.

 */

  private static void createAndShowGUI() {

    //Create and set up the window.

    JFrame frame = new JFrame("HelloWorldSwing");

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

所以在这里我们看到我们有这个方法,它创建一个 JFrame(一个奇特的窗口),然后立即指定当用户尝试退出时它希望应用程序的行为如何进行。在这种情况下,他们只是选择批量标准选项。


EXIT_ON_CLOSE 不是唯一的选项,您可能会发现查看它们很有趣。


这很重要,因为稍后:


public static void main(String[] args) {

    //Schedule a job for the event-dispatching thread:

    //creating and showing this application's GUI.

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

        public void run() {

            createAndShowGUI();

        }

    });

}

我们看到该应用程序正在其自己的线程内运行。


因此,在幕后,计算机有某种无限循环来保持 UI 的活力。这部分需要知道可以打破该循环并让线程死亡。


(invokeLater、Runnable 和 run 都是我们在这里处理线程的线索:D)


查看完整回答
反对 回复 2024-01-05
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信