【问题标题】:How to make a method run only once in the lifetime of application如何使方法在应用程序的生命周期中只运行一次
【发布时间】:2017-03-29 02:46:24
【问题描述】:

我有一个用默认值填充文件的方法,我在构造函数中调用该方法。我希望该方法只运行一次(我的意思是只运行一次,所以当用户按下播放按钮 /in eclipse/ 时,该方法将不会在第二次按下时运行。

我尝试过类似的方法,但它不起作用:

private boolean defaultExecuted;
public synchronized void defaultStatsFile()
{
    if (defaultExecuted)
    {
        return;
    }
    else
    {
        fileReadNWrite.configWriter("panel1", "non-US incidents");
        fileReadNWrite.configWriter("panel2", "Hoaxes");
        fileReadNWrite.configWriter("panel3", "Under NUFORC investigation");
        fileReadNWrite.configWriter("panel4", "Likliest Shape");
        defaultExecuted = true;
    }

}

有没有更聪明的方法只填写一次文件?

如果有不清楚的地方请评论,我会回复。 任何帮助表示赞赏。

【问题讨论】:

  • 这没关系,但如果你想要它用于此类的 all 实例化,则将 boolean 设为静态。其他方法是使用单例或使用spring
  • @ScaryWombat 嗨,感谢您的评论。我试图让它静态,但它没有工作。我会尝试研究单例。我希望静态解决方案是否有效。任何关于可能性的想法为什么它不起作用?! ://
  • 你的意思是eclipse运行按钮?按两次将运行应用程序两次,因此该方法当然会被调用两次。
  • @pvg 对不起,我不是那个意思。我的意思是一旦它运行并且他们关闭程序。然后再次运行程序,该方法将不再被调用。所以我希望该方法只运行一次,再也不会运行。谢谢
  • 您最好解释一下您要解决的一般问题。 “再也不会”真的很模糊。再也不会在那台电脑上?直到宇宙热死,再也不来了?为什么?你到底想完成什么?

标签: java


【解决方案1】:

最好在静态块中填充数据

like : 在 Main 类中包括适当的异常处理,这样就不需要依赖构造函数来加载文件中的默认数据。

static {
            fileReadNWrite.configWriter("panel1", "non-US incidents");
            fileReadNWrite.configWriter("panel2", "Hoaxes");
            fileReadNWrite.configWriter("panel3", "Under NUFORC investigation");
            fileReadNWrite.configWriter("panel4", "Likliest Shape");
            defaultExecuted = true;
}

【讨论】:

  • 这会导致在加载类时执行代码。我不确定这是否是从 GUI 代码调用时最优雅的解决方案。不过,这种机制是创建 java 单例的好方法!
  • @NikCorthaut :他提到他需要加载一次,因为 AWT/SWING 基础应用程序的 main 方法必须在那里。他也可以在一些 Util 类的静态方法中执行此操作,并在加载 GUI 之前在 main 方法中调用它,这取决于哪种方法会更好。
  • 我发现这是一个非常优雅的解决方案,对我来说效果很好。
【解决方案2】:

因为所有代码都在类中,并且你可以有多个独立的类加载器,你不能在 java 中这样做,你需要一些 java 之外的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    相关资源
    最近更新 更多