我有这样的事情:

public static final String path;
static {
    path = loadProperties("config.conf").getProperty("path");
}

public static void main(String... args) {

    // ... do stuff (starting threads that reads the final path variable)

    // someone want's to update the path (in the config.conf file)
    restart(); // ???
}

我要重新初始化JVM调用静态初始化一遍,然后main(...)

<强>能不能做到吗

有帮助吗?

解决方案

您使用自定义的类装载器可以启动应用程序,这将让你加载和卸载你的静态变量。

但是,基本上它是一个非常糟糕的设计需要这样做。我喜欢拍场决赛,但你不应该让他们最终,如果你想改变他们。

其他提示

如果你的目标很简单,就是重新加载一些配置文件,为什么不执行文件更改监视器?

下面是本主题的很好的教程:

http://download.oracle.com/javase/tutorial/必要/ IO / notification.html

我想你求婚(自动重新启动您的应用程序),将是一个不只是看文件的更新稍微麻烦了。

一个简单的方法是简单地的使用静态初始化这一点。为什么不干脆让path非最终在main加载它?

这个怎么样结构

public static void main(String... args) {

    boolean restart = true;
    while (restart )
    {
        retart = runApplication();
    }

}

如果你曾经发现需要重新启动你的应用程序,有runApplication返回true。 如果它是时间退出返回假;

如果你有一个UI或者后台程序,所以你可以控制输出到标准输出,你可以在启动程序外面的包装。

如果在退出时输出节目“重新启动”,您可以再次从该包装重新启动程序。如果不是,它只是结束。

或者,如果你想要的纯Java方式,你可以用类加载器的解决方案彼得Lawrey在他的文章中提到去。在去沿着这条路你真的应该重新考虑你的设计(如果它是你的代码),并能够自我整顿的代码。

scroll top