【问题标题】:Creating all JPanels at program startup vs. creating them only when needed在程序启动时创建所有 JPanel 与仅在需要时创建它们
【发布时间】:2012-06-11 15:28:52
【问题描述】:

作为一般规则,具有多个部分的程序应该在启动时创建所有内容,还是应该在实际需要时等待创建每个部分?

我的具体案例是一个具有多个不同部分的 Java 信息​​亭式应用程序。每个部分都是执行特定任务的不同 JPanel(具有不同的按钮 / JTables / JLabels / 等)。这是一个未完成的项目,我有一段时间没有接触过,但我会完成它,我正在查看代码并尝试重构我认为我应该做的事情。

到目前为止,该程序在启动时创建了每一个 JPanel,因此每当用户单击更改显示 JPanel 的按钮之一时,它会立即加载,因为它已经创建。到目前为止,我认为在性能方面没有那么重要,但我想知道在这种情况下什么是标准做法。

【问题讨论】:

    标签: java swing jpanel loading


    【解决方案1】:

    我会在启动时全部加载,因为它可能会导致启动缓慢,并且还会加载一些不需要的面板。例如,您有 4 个面板加载联系人、关于、图片和提要。假设您在启动时加载了所有 4 个,如果用户只访问了其中 2 个然后关闭应用程序会怎样。有时用户可能只想看到一个面板,但他必须等待所有面板在启动时加载。所以我会建议根据需要加载面板。仅在框架上加载主要数据,然后当用户第一次单击加载面板的按钮时,会显示一个进度条,直到加载该面板,然后从下一次单击按钮时开始显示面板而无需等待它已经通过第一次点击加载。

    如果您的应用程序从 Internet 获取数据,那么在启动时加载所有数据也会产生额外的带宽和数据费用。

    【讨论】:

    • 好建议,但我认为应用程序不会经常打开/关闭。不过,我会保留加载栏的想法,因为我知道某些面板会比其他面板更频繁地使用。谢谢!
    • 是的,这就是我想说的,仅加载用户在启动时最有可能查看的那些面板,并根据需要加载其他面板。否则它会让用户思考“为什么这东西会加载不需要的数据?
    【解决方案2】:

    这取决于你的项目需要。

    如果 响应时间 对最终用户很重要,那么您的方法是正确的。

    否则根据需要创建 jpanel

    【讨论】:

    • 它本身并不“重要”,但我也不希望它需要 5-10 秒来加载。我将不得不更深入地考虑一下。
    【解决方案3】:

    我认为这在很大程度上取决于创建 JPanel 的成本。如果它包含一个JTable 以及它从网络上的 MySQL 服务器接收的大量信息,那么创建该JPanel 的成本是相当高的。

    在这种情况下,我只会在需要时创建它。也许在程序运行时永远不需要JPanel,那么为什么要花费所有时间和资源来创建它呢?

    【讨论】:

    • 到目前为止,大多数 JPanel 的成本都不算高,但将来可能会成为问题。有一个面板与您在示例中提到的非常接近:加载 JPanel 时,用户可以选择一些选项,然后单击一个按钮来填充 JTable(目前,它从本地获取数据SQLite 数据库,但我计划通过网络切换到 MySQL 数据库)。因此 JPanel 的要求并不高,因为处理仅在用户单击按钮后完成。不过,对于我拥有的其他一些 JPanel,我会牢记您的建议。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多