【问题标题】:'Cannot init the Global object' error after adding a final static constant to Global class将最终静态常量添加到全局类后出现“无法初始化全局对象”错误
【发布时间】:2017-02-13 18:06:15
【问题描述】:

我正在使用带有 Java 的 Play Framework 2.2.3。

我只是在我的 Global 类中添加一个常量:

public static final String VERSION = play.application().configuration().getString("application.version");

然后我得到这个错误:

play.api.PlayException: Cannot init the Global object[null]
    at play.api.WithDefaultGlobal$$anonfun$play$api$WithDefaultGlobal$$globalInstance$1.apply(Application.scala:55) ~[play_2.10.jar:2.2.3]
    at play.api.WithDefaultGlobal$$anonfun$play$api$WithDefaultGlobal$$globalInstance$1.apply(Application.scala:49) ~[play_2.10.jar:2.2.3]
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.2.3]
    at play.api.WithDefaultGlobal$class.play$api$WithDefaultGlobal$$globalInstance(Application.scala:48) ~[play_2.10.jar:2.2.3]
    at play.api.DefaultApplication.play$api$WithDefaultGlobal$$globalInstance$lzycompute(Application.scala:399) ~[play_2.10.jar:2.2.3]
    at play.api.DefaultApplication.play$api$WithDefaultGlobal$$globalInstance(Application.scala:399) ~[play_2.10.jar:2.2.3]
Caused by: java.lang.ExceptionInInitializerError: null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.7.0_65]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.7.0_65]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.7.0_65]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[na:1.7.0_65]
    at java.lang.Class.newInstance(Class.java:379) ~[na:1.7.0_65]
    at play.api.WithDefaultGlobal$class.play$api$WithDefaultGlobal$$javaGlobal(Application.scala:28) ~[play_2.10.jar:2.2.3]
Caused by: java.lang.RuntimeException: There is no started application
    at scala.sys.package$.error(package.scala:27) ~[scala-library.jar:na]
    at play.api.Play$$anonfun$current$1.apply(Play.scala:68) ~[play_2.10.jar:2.2.3]
    at play.api.Play$$anonfun$current$1.apply(Play.scala:68) ~[play_2.10.jar:2.2.3]
    at scala.Option.getOrElse(Option.scala:120) ~[scala-library.jar:na]
    at play.api.Play$.current(Play.scala:68) ~[play_2.10.jar:2.2.3]
    at play.api.Play.current(Play.scala) ~[play_2.10.jar:2.2.3]

在我的应用程序正常运行之前。如果我将此常量放在任何其他类中,我的应用程序运行良好。只有当我把它放在 Global 我得到这个错误。有什么帮助吗?

【问题讨论】:

    标签: playframework playframework-2.2


    【解决方案1】:

    正如this issue 中指出的那样,如果你想在应用程序启动时访问配置,你应该使用 onStart 方法。

    【讨论】:

    • 谢谢user3567830!所以根本问题不是我使用了一个静态的 final 常量,而是我在启动期间尝试访问 Play 配置?
    • 是的,问题不在于常量本身,而在于您在初始化 Global 对象时尝试访问配置,这不能发生,因为初始化 Global 对象会加载配置。
    • 好的,但是因为我需要这个常量是全局的,所以我必须把它放在其他类中,这没问题。还是谢谢。
    • @Kris 你可以让它成为 Global 中的一个函数。
    • @m-z 但我可能对 Global 中的静态函数有同样的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多